Lucene поиск и подчеркивание - PullRequest
8 голосов
/ 26 марта 2010

Когда я использую Luke для поиска в моем индексе Lucene с помощью стандартного анализатора, я вижу поле, которое я ищу, содержит значения в форме MY_VALUE. Однако когда я ищу поле: «MY_VALUE», запрос анализируется как поле: «мое значение»

Есть ли простой способ экранировать символ подчеркивания (_), чтобы он его искал?

EDIT:

04.01.2010 11:08 PST

Я думаю, что есть ошибка в токенизаторе для Lucene 2.9.1, и она, вероятно, была там раньше. Загрузите Люка и попробуйте найти «BB_HHH_FFFF5_SSSS», когда есть число, возвращаются следующие токены:

"bb hhh_ffff5_ssss"

После некоторого тестирования я обнаружил, что это из-за числа. Если я введу

"BB_HHH_FFFF_SSSS", я получаю

"bb hhh ffff ssss"

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

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

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

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

Кстати, вы можете сопоставить MY_VALUE с помощью KeywordAnalyzer.

1 голос
/ 31 марта 2010

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

Судя по тому, что я считаю вашими требованиями, анализатор ключевых слов должен нормально работать без особых усилий (все поле становится одним термином).

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

Надеюсь, это поможет,

...