Увеличение веса определенных терминов (например, заголовков) при индексации документов в Lucene - PullRequest
1 голос
/ 16 февраля 2011

У меня есть документы, которые я индексирую с помощью Lucene. Эти документы в основном имеют заголовок (текст) и текст (текст). В настоящее время я создаю индекс из Lucene Document s с (среди прочих полей) единственным полем для поиска, которое в основном title+" "+body. Таким образом, если вы ищете что-нибудь, что встречается в заголовке или в теле, вы найдете документ.

Однако теперь я узнал о новом требовании, согласно которому совпадения в заголовке должны привести к тому, что документ будет «более релевантным», чем совпадения в теле. Таким образом, если существует документ с заголовком «Разработка программного обеспечения», и пользователь выполняет поиск «Разработка программного обеспечения», то этот документ должен быть помещен выше в результатах поиска, чем документ, называемый чем-то еще, в котором много говорится о разработке программного обеспечения. в теле.

На самом деле я понятия не имею, как начать реализацию этого требования. Я знаю, что Google, например некоторые части документа рассматриваются как «более релевантные» (например, текст в тегах <h1>), все здесь предполагают, что Lucene поддерживает нечто подобное.

Однако

  • В Javadoc для класса Document четко указано, что поля содержат текст, то есть не структурированный текст, где некоторые части "более важны", чем другие части.
  • В этом сообщении в блоге говорится: «С Lucene невозможно увеличить или уменьшить вес отдельных терминов в документе."

Я не совсем уверен, где искать. Что бы вы предложили?

Любая конкретная информация (например, ссылки на документацию Lucene), прямо заявляющая, что такая вещь не возможна, также будет полезна, тогда мне не нужно тратить больше времени на поиск того, как это сделать. (Программное обеспечение уже написано для Lucene, поэтому мы не будем переписывать его сейчас, поэтому, если Lucene его не поддерживает, то никто (мой босс) ничего не может с этим поделать.)

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Просто используйте два поля, заголовок и тело, и при индексировании увеличьте поле заголовка:

title.setBoost(float)

см. здесь

1 голос
/ 16 февраля 2011

вам, вероятно, следует разделить поле объединения на заголовок и тело по отдельности, а затем использовать повышение во время выполнения, чтобы повысить релевантность для поля заголовка

запрос во время выполнения будет выглядеть так:

см. - http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Boosting%20a%20Term

...