2013-05-19 1 views
3

2 개의 문서가 있고 "Twitter"라는 키워드를 검색하고 있습니다. 두 문서가 모두 "태그"필드가있는 블로그 게시물이라고 가정합니다.탄성 검색 - 용어의 빈도가 높을수록 점수가 높습니다.

문서 A는 "태그"필드에서 만 1 용어를 가지고 있으며, 그것은 "트위터"입니다. 문서 B는 '태그'입력란에 100 개의 용어가 있지만 그 중 3 개는 'Twitter'입니다.

탄성 검색은 문서 B가 더 높은 주파수가 비록 문서화에 높은 점수를 제공합니다. 그러나 점수에는 용어가 더 많으므로 "희석"됩니다. 검색 빈도가 높기 때문에 문서 B에 더 높은 점수를 부여하려면 어떻게합니까?

나는 ElasticSearch/루씬 문서에서 용어의 수에 따라 약간의 정상화를 수행 알고있다. 문서 B가 더 높은 점수를 얻도록이 정규화를 어떻게 비활성화 할 수 있습니까?

답변

3

다른 답변에서는 단일 샤드에서 동일한 결과를 얻었는지 확인하는 것이 흥미로울 것이라고 말합니다. 나는 당신이 생각하기에 그것은 tf/idf 유사성 (기본값)을 사용하여 점수를 계산할 때 고려되는 태그 필드의 규범에 달려 있다고 생각합니다.

사실, lucene은 빈도라는 용어를 사용합니다. 즉, 필드에 용어가 나타나는 횟수 (귀하의 경우 1 또는 3) 및 거꾸로 된 문서 빈도, 즉 용어의 의미 쿼리에서 다른 용어와 비교하기 위해 색인에서 자주 사용됩니다 (단일 용어를 검색하는 경우에는 별 차이가 없습니다).

그러나 짧은 필드를 보상 및 계정에 최종 인덱스 (매핑)에 필드 당이 될 수 증대 시간, 또는 문서 당을 규범라는 또 다른 요인은있다. 탐색 요구에서 Explain 옵션을 사용 가능하게하고 Explain 출력을 볼 때 결과가 규범임을 검증 할 수 있습니다.

나는 첫 번째 문서는 해당 태그가 포함되어 있다는 사실이 더 중요하게 생각하는 태그를 여러 번 있지만 THER 태그를 많이뿐만 아니라이 들어있는 다른 사람. 이 동작이 마음에 들지 않으면 태그 필드에 대한 매핑에서 규범을 비활성화 할 수 있습니다. 필드가 "index":"analyzed" (기본값)이면 기본적으로 사용하도록 설정해야합니다. 태그 입력란을 분석하지 않으려면 (일반적으로 의미가 있지만 데이터 및 도메인에 따라 다름) 태그 입력란에 "omit_norms": true 옵션을 추가하지 않으려면 "index":"not_analyzed"으로 전환 할 수 있습니다.

0

문서가 다른 조각에 있습니까? From Elastic 검색 문서 :

"특정 샤드에서 쿼리를 실행하면 다른 샤드의 용어 빈도와 다른 검색 엔진 정보는 고려하지 않습니다. 정확한 순위 지정을 지원하려면 다음을 수행해야합니다. 먼저 모든 샤드에 대해 쿼리를 실행하고 관련 용어 빈도를 수집 한 다음이를 기반으로 쿼리를 실행하십시오. "

해결책은 검색 유형을 지정하는 것입니다. dfs_query_and_fetch 검색 유형을 사용하여보다 정확한 채점을 위해 분산 용어 빈도를 계산하고 계산하는 초기 분산 단계를 실행합니다.

당신은 here 자세한 내용을보실 수 있습니다.