Заставьте lucene рассматривать все термины в поле как один термин

StackOverflow https://stackoverflow.com/questions/606576

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Пример:

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

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

Есть какие-нибудь предложения?

Это было полезно?

Решение

Используйте СпанКвери для поиска используется только позиция первого термина.Запрос префикса, обернутый SpanMultiTermQueryWrapper, обернутый SpanPositionRangeQuery:

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>

Другие советы

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


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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top