Косинусное сходство между запросом и документом в Lucene - PullRequest
1 голос
/ 29 августа 2011

Я хотел получить косинусное сходство между длинным запросом и документом в коллекции. Я использую Lucence для индексации коллекции и отправки запросов для получения документов.

Однако я получаю следующую ошибку для некоторых запросов.

"Caused by: org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024"

Я повторил некоторые термины в запросе, чтобы повысить их вес. Но кажется, что lucene просто выполняет простое логическое извлечение вместо вычисления косинусного сходства, используя tf-idf для документа и запроса.

Кто-нибудь может это подтвердить?

1 Ответ

1 голос
/ 30 августа 2011

На этой странице объясняется оценка, используемая в люцене:

http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html

В нем говорится:

Оценка запроса q для документа d соответствует косинусному расстоянию или точечному произведению между вектором документа и запроса в модели векторного пространства (VSM) информационного поиска. Документ, вектор которого ближе к вектору запроса в этой модели, оценивается выше.

Так что нет, lucene не просто использует логический поиск.

Ваше исключение связано с вашим запросом и тем, как lucene преобразует его. Было бы полезно, если бы вы могли привести пример неудачного запроса.

Кроме того, вы пишете:

Я повторил некоторые термины в запросе, чтобы повысить их вес.

Вам не нужно этого делать, вместо этого вы можете просто присвоить вес терминам в вашем запросе: http://lucene.apache.org/java/2_0_0/queryparsersyntax.html

например. чтобы найти яблоко и апельсин и увеличить апельсин, вы можете написать:

apple orange^4
...