lucene.net фильтрация по нескольким полям

Ниже приведена моя схема

Product_Name (Анализируется), Категория (Анализируется)

Сценарий:
Я хочу найти те продукты, категория которых точно «мобильные телефоны и аксессуары» , а Product_Name — » sam*»

Эквивалентный SQL-запрос

select * from products
where Product_Name like '%sam%' and Category='Cellphones & Accessories'

Я использую lucene.net.
Мне нужно эквивалентное lucene.netзаявление.

1 ответ

  1. Поскольку это несколько месяцев назад, я буду краток (я могу расширить, если вы все еще заинтересованы)…

    Если вы хотите иметь точное соответствие категории, то не анализируйте. Анализаторы разрежут строку на биты, которые затем можно найти. Совпадающий случай может быть проблематичным, поэтому, возможно, только анализатор нижнего регистра будет работать для этого поля.
    Было бы полезно иметь несколько полей, анализируемых по-разному, чтобы можно было использовать различные запросы.

    Примечание: «sam*» не эквивалентно » %sam%»

    Вы хотите, чтобы» sam «был префиксом ie» sample «или словом»The sam product»?
    Если это слово, то анализатор без стоп-слов должен быть в порядке.
    Хороший трюк состоит в том, чтобы создать много полей (с тем же именем) с вариациями имени. Вероятно, только с нижним регистром анализатора

    имя: «некоторый продукт образца»

    имя: «продукт образца»

    наименование «» продукт»

    Затем посмотрите на «prefix queries». запрос (name: sam)будет совпадать.

    Также взгляните на PerFieldAnalyzerWrapper, чтобы использовать разные анализаторы для каждого поля.