Понимание запросов Lucene - PullRequest
0 голосов
/ 25 августа 2011

Мне интересно узнать немного больше о том, как оцениваются запросы Lucene.В своей документации они упоминают VSM.Я знаком с VSM, но кажется, что он несовместим с типами запросов, которые они допускают.

Я попытался пройтись по исходному коду для BooleanScorer2 и BooleanWeight, но безрезультатно.

Мой вопросМожет кто-нибудь пройти через выполнение BooleanScorer, чтобы объяснить, как он комбинирует запросы.

Кроме того, есть ли способ просто отправить несколько терминов и просто получить необработанный счет tf.idf для этих терминов, способэто описано в документации?

1 Ответ

4 голосов
/ 25 августа 2011

Место для начала: http://lucene.apache.org/java/3_3_0/api/core/org/apache/lucene/search/Similarity.html

Я думаю, это прояснит вашу несогласованность?Lucene объединяет булеву модель (BM) поиска информации с векторно-пространственной моделью (VSM) поиска информации - документы, «одобренные» BM, оцениваются VSM.

Следующее, на что нужно обратить внимание, это Searcher.explain, которыйможет дать вам строку, объясняющую, как вычисляется оценка для пары (запрос, документ).

Отслеживание выполнения BooleanScorer может быть сложной задачей, я думаю, что, пожалуй, проще всего сначала понять BooleanScorer2, который использует такие вспомогательные показатели, какConjunctionScorer / DisjunctionSumScorer и думать о BooleanScorer как об оптимизации.

Если это сбивает с толку, начните с TermScorer еще проще.Лично я смотрю на это «снизу вверх» в любом случае:

  • Запрос создает вес, действительный по всему индексу: это включает в себя boost, idf, queryNorm и даже, что сбивает с толку, усиления любого «внешнего»/ 'родительские' запросы типа booleanquery, которые содержат термин.этот вес вычисляется один раз.
  • Вес создает счетчик (например, TermScorer) для каждого сегмента индекса, для отдельного термина этот оценщик имеет все, что ему нужно в формуле, за исключением того, что зависит от документа:в пределах срока действия документа (TF), который он должен прочитать из проводок, и значение нормализации длины документа (норма).Вот почему термин оценщик оценивает документ как вес * sqrt (tf) * норма.на практике это кэшируется для значений tf <32, так что для оценки большинства документов используется однократное умножение. </li>
  • BooleanQuery на самом деле не делает «много», за исключением того, что его счетчики отвечают за использование nextDoc () и advance ()и если булева модель удовлетворена, то она объединяет оценки подкорей, применяя фабрику координации (ordin ()), основанную на количестве совпадающих подкорей.

в целом, это определенно сложнопроследить, как lucene оценивает документы, потому что во всех выпущенных формах оценщики несут ответственность за 2 вещи: сопоставление и вычисление результатов.В транке Lucene (http://svn.apache.org/repos/asf/lucene/dev/trunk/) теперь они разделены таким образом, что сходство в основном отвечает за все аспекты скоринга, и это отдельно от сопоставления. Поэтому API там может быть проще для понимания, может быть, сложнее, но вПо крайней мере, вы можете обратиться к реализации многих других моделей скоринга (BM25, языковые модели, отклонение от случайности, информационные модели), если вы запутались: http://svn.apache.org/repos/asf/lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/similarities/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...