Каково использование поля типа "multiValued" в Solr?
Я новичок в Apache Solr. Даже после прочтения части документации мне трудно понять функциональность и использование свойства типа поля multiValued
.
Что внутри Solr делает/обрабатывает/обрабатывает поле, помеченное как multiValued?
В чем разница в индексировании в Solr между полем с несколькими значениями и теми, которые не являются?
Может кто-нибудь объяснить с хорошим примером?
Док говорит:
многозначных = истина | ложь
Истинно, если это поле может содержать несколько значений в документ, то есть, если он может появиться несколько раз в документе
Ответы
Ответ 1
Многозначное поле полезно, когда для поля имеется более одного значения. Легким примером могут быть теги, может быть несколько тегов, которые нужно индексировать. поэтому, если у меня есть поле тегов как многозначное, запрос solr вернет список вместо строкового значения. Следует отметить, что вам нужно отправить несколько строк для каждого значения тегов, например:
<field name="tags">tag1</tags>
<field name="tags">tag2</tags>
...
<field name="tags">tagn</tags>
как только у вас есть все индексы значений, которые вы можете искать или фильтровать результаты по любому значению, e, g. вы можете найти все документы с tag1, используя запрос типа
q=tags:tag1
или использовать теги для фильтрации результатов, например
q=query&fq=tags:tag1
Ответ 2
multiValued, определенный в схеме, разрешено ли поле иметь более одного значения.
Например:
если у меня есть идентификатор fieldType, который является идентификатором multiValued = false, индексируя документ таким образом:
doc {
id : [ 1, 2]
...
}
приведет к тому, что исключение будет выбрано в потоке индексирования, и документ не будет проиндексирован (проверка схемы не удастся).
С другой стороны, если у меня есть несколько значений для поля, я бы хотел установить multiValued = true, чтобы гарантировать правильную индексацию, например:
doc {
id : 1
keywords: [ hello, world ]
...
}
В этом случае вы определяете "ключевые слова" как поле с несколькими значениями.
Ответ 3
Я использую несколько полей значений только с полями-копиями, поэтому, думайте так, скажите, что все поля будут однозначными, если только это не поле для копирования, например, у меня есть следующие поля:
<field name="id" type="string" indexed="true" stored="true"/>
<field name="name" type="string" indexed="true" stored="true"/>
<field name="subject" type="string" indexed="true" stored="true"/>
<field name="location" type="string" indexed="true" stored="true"/>
Я хочу запросить только одно поле и, возможно, искать все 4 поля выше, тогда нам нужно использовать copyfield. сначала создать новый полевой вызов "все" , а затем скопировать все в "все"
<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="all"/>
Теперь поле "все" должно быть многозначным.