Заставьте lucene рассматривать все термины в поле как один термин - PullRequest
0 голосов
/ 03 марта 2009

В моих документах Lucene у меня есть поле "компания", где название компании маркируется. Мне нужна токенизация для определенной части моего приложения. Но для этого запроса мне нужно создать PrefixQuery для всего поля компании.

Пример:

  • Мой Бренд
    • мой
    • бренд
  • ферма брахманов
    • брахман
    • ферма

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

Есть предложения?

Ответы [ 2 ]

1 голос
/ 03 марта 2009

Создайте еще одно проиндексированное поле, в котором название компании будет , а не , отмеченным токеном. При необходимости выполняйте поиск в этом поле, а не в поле имени токенизированной компании.


Если вы хотите быстрый поиск, вам нужны индексные записи, которые указывают непосредственно на интересующие вас записи. Там может быть что-то, что вы можете использовать с данными о близости для фильтрации записей, но это будет медленно. Я вижу проблему в следующем: как эффективно выполнить «содержащий» запрос по полному полю?

Возможно, вы сможете минимизировать увеличение размера индекса, создав (для каждого текущего поля) поле «первый член» и поле «оставшиеся условия». Это устранит дублирование первого члена в двух областях. Для «обычных» запросов вы ищите условия запроса в любом из этих полей. Для запросов «старт с» вы ищете только поле «первый термин». Но это похоже на большие проблемы, чем оно того стоит.

0 голосов
/ 26 октября 2011

Используйте SpanQuery только для поиска позиции первого термина. PrefixQuery, заключенный в SpanMultiTermQueryWrapper, заключенный в SpanPositionRangeQuery:

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...