Подтвердить что ты не робот

Индексация Lucene: режимы хранения и индексирования

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

Следующие параметры:

  • Store.Yes
  • Store.No

и

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

Я не понимаю вариант магазина. Зачем вам когда-либо хотеть НЕ хранить свою область?
Tokenizing разбивает содержимое и удаляет шумовые слова/разделители (например, "и", "или" и т.д.)
Я не знаю, какие нормы могут быть. Как хранятся маркированные значения? Что произойдет, если я сохраню значение "моя строка" в поле "Имя поля"? Почему не запрос

fieldName:my string

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

4b9b3361

Ответ 1

Store.Yes

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

Store.No

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

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

Если вы храните свои данные в базе данных и используете только индекс 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

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

Ответ 3

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