elasticsearch

    [검색엔진] Elasticsearch 랭킹 (2) - 유사도 점수 정규화

    [검색엔진] Elasticsearch 랭킹 (2) - 유사도 점수 정규화

    개요 Elasticsearch에서 질의어를 기준으로 유사도를 매기는 BM25 점수는 0~무한대의 값을 가진다. (물론 현실적으로는 대체로 20, 최대 100 이내의 점수일 것이다) 검색에서 유사도 점수만 사용하는 경우도 있지만, 다른 점수(문서 자체의 품질 점수, 또는 특정 필드의 가중치 점수 등)를 같이 활용하여 랭킹에 사용하기도 한다. 유사도 점수를 다른 점수와 결합하여 사용하기 위해서는 그 자체로 사용할 때 몇 가지 단점이 있다. BM25 점수가 3, 15일 때의 동일한 품질점수 0.5는 영향력 차이가 매우 크다. BM25 점수가 어느 정도의 값을 가질지는 질의어에 따라 상당한 차이가 발생하기 때문에 품질점수의 영향력을 예측하기가 매우 어려워진다. 물론, 검색된 문서들간의 상대적인 비교가 목적이기 ..

    [검색엔진] Elasticsearch에서의 랭킹 (1) - 스크립트

    개요 검색엔진에서 랭킹은 상당히 중요하다. 검색 결과가 10개 수준인 경우 랭킹이 잘못되어도 품질에서 차이가 크게 안 날 수 있지만, 검색 결과가 수 천, 수 만개인 경우 품질에 상당한 차이가 발생된다. ES에서 랭킹을 어떻게 조정할 수 있는지, 랭킹에는 어떤 요소들이 있는지 등을 살펴본다. 우선 첫 번째로 ES에서 스크립트를 작성하는 방법부터 알아보자. ES에서 스크립트 작성하기 ES에서 script_score를 이용해서 커스터마이징 랭킹을 구현할 수 있다. script_score는 script 언어를 이용해서 코드를 작성하는 방식이다. script 언어는 painless, expression, mustache, java를 지원한다. Scripting 이전에는 python, javascript를 지원하..