2013-08-15 2 views
1

Я использую WhitespaceAnalyzer в качестве анализатора запросов. Если у меня есть 2 документа:Как оценка Луцены зависит от относительного положения запроса?

| text | a b c | 
| text | b a c | 

text является полем.

Теперь структура индекса что-то вроде этого:

|Term| in document | 
| a | a b c/b a c| 
| b | a b c/b a c| 
| c | a b c/b a c| 

И у меня есть запрос:

| text | a b c | 

Как я могу получить более высокий балл за a b c и более низкий для b a c.

Поддерживает ли Lucene расчетный балл в зависимости от относительное положение?

я обнаружил, что я нашел, что это помогло бы:

PhraseQuery phraseQuery = new PhraseQuery(); 
phraseQuery.setSlop(1); 

Таким образом, они получили бы разные баллы.

Смотреть еще: http://www.blogjava.net/tangzurui/archive/2008/09/22/230357.html

And here I come across another question: https://stackoverflow.com/questions/18394532/how-can-lucenes-scoring-depend-on-terms-relative-position-in-the-document

ответ

0

Это зависит от того, какой тип запроса вы используете. Некоторые запросы могут получить больше баллов, если фраза, которую вы выполняете, находится в правильном порядке (например, новый йорк или йорк новый). Согласно Lucene документации, вы можете использовать объяснение нот, чтобы увидеть, почему АВС адресности более высокий балл, чем BA C.

Scoring очень сильно зависит от способа документы индексируются, так что важно понять (см. «Руководство по началу работы с Apache Lucene - Getting » и форматы файлов Lucene, прежде чем продолжить с этого раздела.) Также предполагается, что читатели знают, как использовать функциональные возможности Searcher.explain (Query query, int doc) , которые могут пройдите долгий путь в информировании, почему счет возвращается.

http://lucene.apache.org/core/3_6_2/scoring.html

UPD. Для хранения положение точки смотреть на это, если вы используете Lucene 3 http://lucene.apache.org/core/3_0_3/api/core/org/apache/lucene/document/Field.TermVector.html

+0

Спасибо, что ответили. Боюсь, что я не дал понять. Я имею в виду, в случае, когда я сказал, что оценка будет одинаковой для обоих случаев. Мне просто интересно, как сделать окончательный результат в зависимости от относительной позиции. После того, как анализатор обработал вход, заразите, мы получим одну и ту же структуру в индексе для обоих случаев. – luoluo

+0

Итак, вам нужно взглянуть на анализатор, который хранит позицию. Я буду обновлять ответ – Mysterion

+0

Я думаю, что termVector в основном предназначен для выделения. Я нашел лучшее решение, как я сказал выше. Спасибо. – luoluo

0

счет вклада в фразовом зависит от расстояния:

  • наибольшее количество баллов за расстояние = 0 (точное совпадение).
  • оценка становится ниже по мере того, как расстояние увеличивается.

Для вашего случая запрос «a b c» будет соответствовать документу «a b c» с расстоянием 0. Это приведет к высшей оценке фразы. Для документа «b a c» расстояние будет больше 0. Так что счет будет меньше.

Для получения дополнительной информации смотрите исходный код org.apache.lucene.search.SloppyPhraseScorer Класс.

+0

Я нашел, что это поможет: PhraseQuery phraseQuery = new PhraseQuery(); phraseQuery.setSlop (3); – luoluo

Смежные вопросы