Lucene Analyzer для использования со специальными символами и пунктуацией? - PullRequest
0 голосов
/ 29 апреля 2010

У меня есть индекс Lucene, в котором есть несколько документов. Каждый документ имеет несколько полей, таких как:

Id
Project
Name
Description

Поле Id будет уникальным идентификатором, таким как GUID, Project - это ProjectID пользователя, и пользователь может просматривать только документы для своего проекта, а Имя и Описание содержат текст, который может содержать специальные символы.

Когда пользователь выполняет поиск в поле «Имя», я хочу попытаться найти лучшее, что я могу, например:

First

Вернет оба:

First.Last 

и

First.Middle.Last

Имя также может быть что-то вроде:

Test (NameTest)

Где, если пользователь вводит «Test», «Name» или «(NameTest)», он может найти результат.

Однако, если я скажу, что Project - это «ProjectA», тогда это должно быть точное совпадение (поиск без учета регистра). То же самое относится и к полю Id.

Какие поля я должен установить как Tokenized, а какие как Untokenized? Кроме того, есть ли хороший Анализатор, который я должен рассмотреть, чтобы это произошло?

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

1 Ответ

1 голос
/ 29 апреля 2010

Ваше поле идентификатора должно быть не токенизировано по простой причине: оно не может быть токенизировано (на основе пробелов), если вы не напишите свой собственный токенизатор. Вы можете токенизировать все остальные поля.

Выполните запрос фразы по имени проекта, найдите PhraseQuery или заключите имя вашего проекта в двойные кавычки (что позволит ему точно соответствовать). Пример: "\" Мой необычный проект "\"

Для поля имени простой запрос должен работать нормально.

Не уверен, есть ли ситуации, когда вы хотите комбинацию полей. В этой ситуации ищите BooleanQuery (который позволяет комбинировать различные запросы boolean-ly)

...