2014-10-21 3 views
0

Я использую booleanquery, построенный из termqueries, все в одном и том же поле, которые все установлены на 'SHOULD' на данный момент.Оценка lucene с booleanquery - определение качества хитов

Я попытался выяснить, как ранжирование в ScoreDoc [] объекта результата работы для этого запроса, но не смогли найти нужную документацию, может быть, вы можете помочь со следующими вопросами:

1) Будет ли хищник booleanquery попадать на все термины, превышающие числа хитов, которые соответствуют только одному термину?

2) Есть ли способ определить, какой запрос был согласован и который не был для результирующего объекта сбой?

Спасибо за помощь!

ответ

0

Булевский запрос делает ранг хитов по нескольким запросам более высоко, чем те, которые соответствуют только одному, но имейте в виду, что это только одна часть алгоритма подсчета очков. Есть ряд других последствий, которые могли бы вымыть это.

Условия запроса, объединенные логическим запросом, имеют свои подзадачи, умноженные вместе, чтобы сформировать окончательный результат, поэтому большее соответствие условий запроса, естественно, будет взвешиваться в большей степени. Кроме того, существует координирующий фактор, который больше, когда сравнивается большая часть условий запроса, которая также умножается на счет.

Однако многочисленные совпадения с одним и тем же термином запроса, длиной документа, сроком действия и усилением также влияют на оценку, и вполне возможно иметь документы, которые, несмотря на то, что они не соответствуют всем условиям, получают более высокий балл от этих воздействий.

Дополнительную информацию об алгоритме, который используется здесь, см. На странице TFIDFSimilarity docs.

Чтобы понять результаты поиска по вашему запросу, вы должны ознакомиться с Explanation. Вы можете получить удобочитаемое объяснение того, почему документ был забит так, как это было, как:

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

Для идентификации фрагментов документов, соответствующих запрос, вы можете использовать Highlighter, простое использование которые могут быть:

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

Ничего себе, спасибо за это, он указал мне в правильном направлении, чтобы начать понимать весь процесс подсчета очков. Я взглянул на объяснение, особенно на .ToString(). Моя проблема заключается в следующем: Возможно, у меня есть условия поиска A-Z. В настоящий момент единственный способ узнать, какой термин был согласован документом, - это изучить объяснение.toString() и посмотреть, есть ли запись для термина или нет. Есть ли более прямой способ? – rinmic