body = {
"query": {
"script_score": {
"query": {"match_all": {}},
"script": {
"source": "cosineSimilarity(params.query_vector, doc['text_vector']) + 1.0",
"params": {"query_vector": query_vector}
}
}
}
}
res = es.search(index=INDEX, body=body)
이런 식으로 cosine similarity를 score algorithm으로 검색하려 하였으나 다음과 같은 오류가 발생했다.
BadRequestError: BadRequestError(400, 'search_phase_execution_exception', 'runtime error')
문제 원인 : index를 만들 때 field의 data type을 setting.json 파일을 통해 지정했었는데, 이 부분이 잘 되지 않아서 data type이 "dense_vector"로 되어있지 않고 "float"으로 되어있었다.
해결 : elasticsearch 도커 파일을 지우고 다시 만들면서 nori를 다시 설치하지 않아 설정이 되지 않았다. 따라서 nori를 설치한 후 다시 indexing하였다.
정리하자면, 이 에러는 field data type이 제대로 설정되지 않았기 때문에 발생한 문제였다.