Каково использование типа поля «многоцелевого» в Solr?
-
22-10-2019 - |
Вопрос
Я новичок в Apache Solr. Даже после прочтения документация частично, мне трудно четко понять функциональность и использование multiValued
Свойство типа поля.
Что делает внутренне Solr/обрабатывает/обрабатывает поле, которое отмечено как мультиплана?
В чем разница в индексации в Solr между полем, которое мультиплана А те, которые нет?
Кто -нибудь может объяснить с хорошим примером?
Док говорит:
Multivalued = true | false
TRUE, если это поле может содержать несколько значений на документ, то есть, если оно может появиться несколько раз в документе
Решение
Многоцелевое поле полезно, когда для поля присутствует более одного значения. Легким примером могут быть теги, может быть несколько тегов, которые необходимо индексировать. Так что, если у нас есть поле тегов как многоцелевое, ответ 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
Другие советы
Multivaled определяется в схеме, разрешено ли поле иметь более одного значения.
Например:
Если у меня есть FieldType, называемый ID, который является многоцелевым = ложная индексация документа, такого как:
doc {
id : [ 1, 2]
...
}
приведет к тому, что исключение будет брошено в потоку индексации, и документ не будет индексирован (проверка схемы не будет сбой).
С другой стороны, если у меня есть несколько значений для поля, я бы хотел установить Multivalued = true, чтобы гарантировать, что индексация выполняется правильно, например:
doc {
id : 1
keywords: [ hello, world ]
...
}
В этом случае вы определите «ключевые слова» как многоцелевое поле.
Я использую несколько полей стоимости только с CopyFields, так что подумайте об этом, скажем, все поля будут оцениваются, если это не копия, например, у меня есть следующие поля:
<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"/>
Теперь поле «все» должны быть многозначными.