Лучший способ создать поисковый индекс Lucene для поиска контактов - PullRequest
0 голосов
/ 25 января 2012

Я использую Lucene для поиска в базе данных контактов. Под контактами я подразумеваю имя, несколько телефонных номеров, адреса электронной почты, адреса и т. Д. И т. Д. В базе данных они явно разделены на отдельные поля и даже отдельные таблицы. Я хочу иметь возможность искать контакты по любому из полей, чтобы, например, я мог набрать «Джон Доу», и Люсен вернет контактную информацию Джона Доу. У Джона Доу также есть номер телефона, и я хотел бы иметь возможность найти его запись, введя этот номер телефона, или адрес, или адрес электронной почты и т. Д. И т. Д. Я не хочу конкретно указывать, какое поле я ищу.

При создании моего индекса лучше всего объединить все данные в одно поле "данных" или оставить их отдельно? Я не буду хранить данные в индексе, кроме идентификатора, который я буду использовать для извлечения всех дополнительных данных из базы данных. Будет ли Standard Analyzer и Query Parser работать в моей ситуации, или я должен использовать более индивидуальный подход?

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

Ответы [ 2 ]

1 голос
/ 26 января 2012

Вам не нужно создавать единое объединенное поле, поэтому разделение их, вероятно, является лучшим дизайнерским решением.Подумайте, возможно, вы захотите сделать специализированный поиск.

Вы можете использовать MultiFieldQuery для поиска во всех полях, таких как Имя, Адрес, Город ...

1 голос
/ 26 января 2012

Использование одного поля поиска является наиболее эффективным решением.Это уменьшит индекс и ускорит поиск.Даже если вы сохранили поля, у вас все равно может быть одно агрегированное индексированное (но не сохраненное) поле для поиска и одно сохраненное (но не проиндексированное) поле для каждой контактной информации.

Стандартный анализатор и анализатор запросов будутпоможет вам быстро создать прототип, но вам может потребоваться использовать собственный анализатор для улучшения вашего приложения, например, если вы хотите:

  • запросов для получения одинаковых результатов независимо от диакритических знаков ( ASCIIFoldingFilter ),
  • для обработки пробелов в телефонных номерах (чтобы запрос «0532» соответствовал «0532», а также «05 32»).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...