2014-10-21 3 views
0

나는 모든 필드가 동일해야하며 현재는 'SHOULD'로 설정된 용어 쿼리로 구성된 부울 쿼리를 사용하고 있습니다.booleanquery와 lucene 순위 - 히트 품질 결정

:

나는 아마 다음과 같은 질문에 도움을 줄 수는 ScoreDoc [] 결과 개체의 순위가이 쿼리에 대해 어떻게 작동하는지 알아 내려고 시도하지만, 올바른 문서를 찾을 수 없어 1) 부울 쿼리 순위가 단일 조건과 일치하는 히트보다 높은 모든 조건과 일치하는 히트일까요?

2) 일치하는 용어 쿼리와 결과 scoredoc 개체가 아닌 것을 확인하는 방법이 있습니까?

도움 주셔서 감사합니다.

답변

0

부울 쿼리는 여러 쿼리 조건에서 히트 수를 하나만 비교하는 것보다 높지만 점수 알고리즘의 한 부분 일뿐입니다. 다른 것들을 씻을 수있는 여러 가지 영향이 있습니다.

부울 쿼리로 결합 된 검색어는 최종 점수를 형성하기 위해 함께 부수를 곱한 값이 많으므로 더 많은 검색어 조건이 자연스럽게 더 많이 부과됩니다. 그 중에서도 더 많은 비율의 검색어가 일치 할 때 더 커지고 점수에 곱 해지는 coord 요인이 있습니다.

그러나 동일한 검색어 기간, 문서 길이, 용어 희소성 및 부스트가 여러 번 일치해도 점수에 영향을 미치며 모든 용어와 일치하지는 않지만 더 높은 점수를 얻는 문서를 가질 가능성이 있습니다 이러한 영향으로부터

여기서 사용중인 알고리즘에 대한 자세한 내용은 TFIDFSimilarity docs을 참조하십시오.

쿼리에 대한 문서 채점을 이해하려면 Explanation에 익숙해야합니다. 당신이 Highlighter의 간단한 사용을 사용할 수있는 쿼리를 일치하는 문서의 조각을 식별 할 수

Explanation explain = searcher.explain(myQuery, resultDocNo); 
System.out.print(explain.ToString()); 

: 당신은 문서가 같았다 방법을 득점 한 이유의 사람이 읽을 수있는 설명을 얻을 수 있습니다 다음과 같을 수 있습니다 :

QueryScorer scorer = new QueryScorer(myQuery); 
Highlighter highlighter = new Highlighter(scorer); 
String fragment = highlighter.getBestFragment(analyzer, fieldName, myDoc.getField(fieldName)); 
+0

와우, 감사합니다.이 점에 대해 옳은 방향으로 전체 점수 계산 과정을 이해하기 시작했습니다. 설명, 특히 .ToString()을 살펴 보았습니다. 내 문제는 다음과 같습니다. A-Z라는 검색어가있을 수 있습니다. 현재 문서에서 어떤 용어가 일치하는지 알아내는 유일한 방법은 explanation.toString()을 조사하여 용어에 대한 항목이 있는지 여부를 확인하는 것입니다. 더 직접적인 방법이 있습니까? – rinmic