Влияние значения повторения для нескольких полей в Lucene - PullRequest
3 голосов
/ 02 декабря 2011

Какое влияние окажет реиндексация одного и того же значения в нескольких полях в люценовом индексе?

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

Field        |    Value
-------------|---------
firstName    | Ted
lastName     | Blogs
name         | Ted
name         | Bloggs
general      | Ted
general      | Bloggs
all          | Ted
all          | Bloggs

Делая это, я могу легко формировать категории полей, но боюсь, что это может отрицательно сказаться на производительности и / или использовании диска.

Может кто-нибудь посоветовать, пожалуйста

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011

@ aishwarya - это правильно, но для более подробного описания:

Из документов :

Этот файл отсортирован по термину.Термины упорядочиваются сначала лексикографически (по коду символа UTF16) по имени поля термина, а внутри него лексикографически (по коду символа UTF16) по тексту термина.

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

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

4 голосов
/ 03 декабря 2011

Объяснение Xodarap хорошо, просто добавлю еще:

Лучший способ думать о полях в lucene - это то, что у каждого есть свой собственный миниатюрный инвертированный индекс, но идентификаторы документов выровнены / параллельны, так что вы можете выполнять дизъюнкты / конъюнкции в разных полях.

При добавлении большого количества полей следует соблюдать осторожность: по умолчанию в каждом поле загружен байт [maxdoc] в оперативной памяти, используемый для нормализации длины. Так что со многими документами и множеством полей, все с включенной нормализацией длины, это может занять некоторое место.

Рассмотрение нормализации длины варианта использования, вероятно, не очень полезно для таких полей, как firstName / LastName, так что вы можете захотеть пропуститьNorms () в этих коротких полях.

1 голос
/ 02 декабря 2011

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

...