Какая польза от "многозначного" типа поля в Solr? - PullRequest
70 голосов
/ 27 апреля 2011

Я новичок в Apache Solr.Даже после прочтения части документации мне трудно четко понять функциональность и использование свойства типа поля multiValued.

Что внутри Solr делает / обрабатывает / обрабатывает поле, помеченное как multiValued ?

Какая разница в индексировании в Solr между полем, многозначным и полем, которое не является?

Может кто-нибудь объяснить с хорошим примером?

Док говорит:

multiValued = true | false

True, если это поле может содержать несколько значений на документ, т. Е. Если оно может появляться несколько раз вдокумент

Ответы [ 3 ]

72 голосов
/ 27 апреля 2011

Многозначное поле полезно, когда в поле присутствует более одного значения.Простым примером могут быть теги, может быть несколько тегов, которые необходимо проиндексировать.поэтому, если у нас есть поле тегов как многозначное, ответ solr вернет список вместо строкового значения.Следует отметить, что вам нужно отправить несколько строк для каждого значения тегов, например:

<field name="tags">tag1</tags>
<field name="tags">tag2</tags>
...
<field name="tags">tagn</tags>

, как только у вас есть все значения индекса, вы можете искать или фильтровать результаты по любому значению, например, g.Вы можете найти все документы с тегом 1, используя запрос, например

q=tags:tag1

, или использовать теги, чтобы отфильтровать результаты, например

q=query&fq=tags:tag1
14 голосов
/ 27 апреля 2011

multiValued определяет в схеме, разрешено ли для поля более одного значения.

Например:
если у меня есть fieldType с именем ID, который multiValued = false, индексируя документ, такой как это:

doc {
  id : [ 1, 2]
  ...
}

приведет к возникновению исключения в потоке индексирования, и документ не будет проиндексирован (проверка схемы завершится неудачей).

С другой стороны, если у меня есть несколько значений для поля, я бы хотел установить multiValued = true, чтобы гарантировать, что индексация выполняется правильно, например:

doc {
  id : 1
  keywords: [ hello, world ]
  ...
}

В этом случае вы определяете «ключевые слова» как многозначное поле.

12 голосов
/ 15 ноября 2011

Я использую несколько полей значений только с копировальными полями, поэтому подумайте так: скажем, все поля будут однозначными, если только это не поле копирования, например у меня есть следующие поля:

<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.сначала создайте новое поле с вызовом «all», затем скопируйте все в «all»

<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<copyField source="*" dest="all"/>

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

...