Lucene Indexing - PullRequest
       3

Lucene Indexing

2 голосов
/ 13 июля 2010

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

  1. Создайте «Поле» для каждого столбца в таблице
  2. Сохраните все поля
  3. «АНАЛИЗ» всеПоля, кроме поля с первичным ключом
  4. Сохраните каждую строку в таблице как документ Lucene.

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

Я знаю, что в Lucene есть возможность не сохранять поле.Я думал о двух решениях:

  1. Сохраните поле независимо от его размера, и если для поиска будет найдено попадание, извлеките соответствующее поле из документа
  2. Не сохраняйте полеПоле и, если для поиска найдено совпадение, запросите базу данных, чтобы получить соответствующую информацию

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

Ответы [ 3 ]

3 голосов
/ 13 июля 2010

Конечно, ваша система будет более отзывчивой, если вы будете хранить все в Lucene. Сохраненное поле не влияет на время запроса, оно только увеличит размер вашего индекса. И, вероятно, не намного больше, если только небольшая часть строк содержит много данных. Поэтому, если размер индекса не является проблемой для вашей системы, я бы согласился с этим.

2 голосов
/ 14 апреля 2013

Я категорически не согласен с ответом Паскаля.Размер индекса может оказать существенное влияние на производительность поиска.Основными причинами являются:

  • сохраненные поля увеличивают размер индекса.Это может быть проблемой с относительно медленной системой ввода / вывода: все сохраненные поля
  • загружаются при загрузке документа в память.Это может быть хорошим стрессом для хранимых полей GC
  • , которые могут повлиять на время повторного открытия считывателя.Если исходные данные уже хранятся в другом месте, рекомендуется извлечь их из исходного хранилища данных.
0 голосов
/ 05 декабря 2016

При добавлении строки из базы данных в Lucene вы можете судить, действительно ли ее нужно было записать в инвертированный индекс. Если нет, вы можете использовать Index.NOT, чтобы избежать записи слишком большого количества данных в инвертированный индекс. Между тем, вы можете судить, где столбец будет запрашиваться по значению ключа. Если нет, вам не нужно использовать Store.YES для хранения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...