Индексирование Lucene: объяснение режимов хранения и индексирования - PullRequest
42 голосов
/ 16 марта 2009

Я думаю, что я все еще не понимаю варианты индексации lucene.

Следующие опции

  • Store.Yes
  • Store.No

и

  • Index.Tokenized
  • Index.Un_Tokenized
  • Index.No
  • Index.No_Norms

Я не очень понимаю вариант магазина. Почему вы не хотите хранить свое поле?
Токенизация - это разбиение содержимого и удаление шумовых слов / разделителей (например, «и», «или» и т. Д.) Я понятия не имею, какими могут быть нормы. Как хранятся токенизированные значения?
Что произойдет, если я сохраню значение «моя строка» в «fieldName»? Почему не запрос

fieldName:my string

вернуть что-нибудь?

Ответы [ 3 ]

83 голосов
/ 17 марта 2009

Store.Yes

Означает, что значение поля будет сохранено в индексе

Store.No

Означает, что значение поля будет НЕ сохранено в индексе

Store.Yes / No не влияет на индексирование или поиск с lucene. Он просто сообщает lucene, хотите ли вы, чтобы он действовал как хранилище данных для значений в поле. Если вы используете Store.Yes, то при поиске значение этого поля будет включено в ваш результат поиска Documents.

Если вы храните свои данные в базе данных и используете для поиска только индекс Lucene, то вы можете использовать Store.No для всех своих полей. Однако, если вы также используете индекс в качестве хранилища, вам понадобится Store.Yes.

Index.Tokenized

Означает, что поле будет размечено, когда оно будет проиндексировано (вы его получили). Это полезно для длинных полей с несколькими словами.

Index.Un_Tokenized

Означает, что поле не будет проанализировано и будет сохранено как одно значение. Это полезно для ключевого слова / одного слова и некоторых коротких полей из нескольких слов.

Index.No

Именно то, что написано. Поле не будет проиндексировано и, следовательно, недоступно для поиска. Однако вы можете использовать Index.No вместе с Store.Yes для хранения значения, которое вы не хотите использовать для поиска.

Index.No_Norms

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

Для дальнейшего чтения, lucene javadocs бесценны (текущая версия API 4.4.0):

В связи с вашим последним вопросом о том, почему ваш запрос ничего не возвращает, не зная больше о том, как вы индексируете это поле, я бы сказал, что это потому, что ваш спецификатор fieldName привязан только к строке 'my'. Для поиска фразы «моя строка» вы хотите:

fieldName: "моя строка"

Поиск слов "my" и "string" в поле fieldName:

fieldName: (моя строка)

2 голосов
/ 15 января 2014

В случае, если кто-то из пользователей Java наткнется на это, те же опции в ответе от марта 2009 года все еще существуют в библиотеке Java Lucene 4.6.0, но не рекомендуются. Текущий способ установить эти параметры - FieldType .

0 голосов
/ 19 октября 2017

Store.YES даст вам возможность выделить слово (с помощью функции подсветки), которое соответствует вашему поисковому слову. Это означает не только извлеченный, но и отображаемый

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