Lucene Proximity Search с несколькими словами - PullRequest
1 голос
/ 30 сентября 2011

Я пытаюсь создать запрос для поиска в индексе Lucene имен с вариантами имен. Индекс был построен с Lucene.NET версии 2.9.2

Пользователь вводит, например, «Маргарет Уайт». Без варианта варианта имени мой запрос становится «Маргарет Уайт» ~ 1, и он работает.

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

Маргарет / Маргретт Уайт / Уайт

Запрос "Маргретт Уайт" ~ 1 ИЛИ "Маргарет Уайт" ~ 1 ИЛИ "Маргрет Уайтт" ~ 1 ИЛИ "Маргарет Уайт" ~ 1

дает мне правильный результат, но с учетом возможных комбинаций вариантов 100 x 100 строка запроса будет по меньшей мере громоздкой.

Я пробовал различные способы создания более компактного запроса, но, похоже, ничего не работает.

Может кто-нибудь дать мне какие-либо указатели или альтернативный подход. У меня есть контроль над процессом создания индекса, и мне интересно, что я могу сделать на этом этапе?

Спасибо за внимание Roger

Ответы [ 2 ]

4 голосов
/ 30 сентября 2011

Используйте фильтр синонимов в процессе индексации, а не во время запроса. Просто сопоставьте «white», «Whyte», ... с каким-то одним словом; скажи "белый". То же самое для "Маргарет".

Тогда ваш запрос будет "margaret white"~1

1 голос
/ 05 декабря 2012

Я столкнулся с подобной проблемой и решил ее, написав собственный анализатор запросов и вручную создавая примитивы запросов. Написание собственного анализатора запросов не обязательно легко, но дает вам большую гибкость. В моем новом языке запросов я использую в / N, чтобы указать запрос близости. Благодаря этому возможны следующие сложные запросы:

margaret within/3 white
margaret within/3 (white or whyte)

Или даже более сложные запросы

("first name" within/3 margaret) within/10 ("last name" within/3 (white or whyte))
...