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

Индекс Solr против сохраненного

Я немного смущен, что такое поведение индекса и сохраненные атрибуты полей Solr.

Например, если в файле Schema.xml есть следующее:

<field name="test1" type="text" indexed="false"
        stored="false" required="false" />

Не будет ли поле test1 не сохранено в документе Solr, даже если я создам документ с этим полем в нем и установлю значение в это поле и передам документ в Solr. Поскольку у меня есть атрибут stored=false, означает ли это, что значение поля теряется в Solr и не сохраняется?

4b9b3361

Ответ 1

Это правильно. Обычно вы хотите, чтобы ваше поле было проиндексировано или сохранено, или и то, и другое. Если вы установите оба значения в false, это поле не будет доступно в ваших документах Solr (либо для поиска, либо для отображения). См. Ответ Alexandre для особых случаев, когда вы хотите установить оба значения false.

Как указано здесь: indexed=true делает поиск по полю (и сортируется и фасет). Например, если у вас есть поле с именем test1 с indexed=true, вы можете его искать как q=test1:foo, где foo - это значение, которое вы ищете. Если indexed=false для поля test1, то этот запрос не вернет никаких результатов, даже если у вас есть документ в Solr с test1 значением foo.

stored=true означает, что вы можете получить поле при поиске. Если вы хотите явно получить значение поля в своем запросе, вы будете использовать параметр fl в своем запросе, например fl=test1 (по умолчанию fl=* означает получение всех сохраненных полей). Только если stored=true для test1, значение будет возвращено. Иначе он не будет возвращен.

Ответ 2

Основной момент, когда оба параметра установлены в false, - это явно пропустить это конкретное поле.

Например, если у вас есть хранение/индексирование dynamicField mapping, и вы хотите игнорировать одно имя, которое в противном случае попадает под шаблон dynamicField.

В качестве альтернативы вы можете использовать dynamicField для игнорирования целого набора полей с тем же префиксом/суффиксом, который поступает от третьего лица. Например, Tika отправит вам целую кучу полей метаданных, которые вы можете просто игнорировать. См. Это в примере Solr schema.xml и используется в файле solrconfig.xml

В более поздних версиях Solr вы также можете использовать IgnoreFieldUpdateProcessorFactory (см. Полный список для других), который будет избавляться от этих полей еще раньше в процессе индексирования.

Ответ 3

Цитата из этого ответа в потоке почты Solr:

"индексированные" и "сохраненные" являются независимыми, ортогональными атрибутами - вы можете использовать любую из четырех комбинаций true и false. "indexed" используется для поиска или запроса, "поисковой" части обработки запроса запроса. Когда поиск/запрос/поиск завершены и выбран набор документов, "сохраненный" представляет собой набор полей, значения которых доступны для отображения или возврата с помощью ответа Solr.

Частично причиной разделения является то, что Solr/Lucene "анализирует" или преобразует входные данные в более эффективную форму для более быстрого и релевантного поиска/поиска. К сожалению, анализируемые/трансформированные данные часто больше не подходят для показа и потребления человеком. Другими словами, анализ/преобразование не является двунаправленным/обратимым. Установка "stored = true" гарантирует, что исходные данные могут быть восстановлены в исходной форме.

Ответ 4

Если оба являются ложными, вы теряете свои данные в этом поле. Если индексировано true, данные доступны для поиска, но не могут быть отображены. Если вы установите значение true, вы не сможете выполнить поиск в этом поле, но его можно отобразить (в этом случае вы можете написать правило копирования, чтобы скопировать информацию из этого поля в поле поиска по умолчанию). Оба установлены как истинные → вы можете искать и отображать.