Каково использование типа поля «многоцелевого» в Solr?

StackOverflow https://stackoverflow.com/questions/5800762

Вопрос

Я новичок в 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"/>

Теперь поле «все» должны быть многозначными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top