Quelle est l'utilisation du type de champ "multivalué" dans Solr?

Je suis nouveau sur Apache Solr. Même après avoir lu la partie documentation , j'ai du mal à comprendre clairement la fonctionnalité et l'utilisation de la propriété multiValued Type de champ.

Qu'est-ce que Solr fait/traite/gère en interne un champ marqué comme multiValued ?

Quelle est la différence d'indexation dans Solr entre un champ qui est à valeurs multiples et ceux qui ne le sont pas?

Quelqu'un peut-il expliquer avec un bon exemple?

Doc dit:

plusieurs valeurs=true|false)

True si ceci peut contenir plusieurs valeurs par document, c'est-à-dire s'il peut apparaître plusieurs fois dans un document

68
demandé sur Mikael Engver 2011-04-27 11:24:56

3 réponses

Un champ à valeurs multiples est utile lorsqu'il y a plus d'une valeur présente pour le champ. Un exemple facile serait les balises, il peut y avoir plusieurs balises qui doivent être indexées. donc, si nous avons le champ tags comme multivalued, la réponse solr retournera une liste au lieu d'une valeur de chaîne. Un point à noter est que vous devez soumettre plusieurs lignes pour chaque valeur des balises comme:

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

Une fois que vous avez tous les index de valeurs, vous pouvez rechercher ou filtrer les résultats par n'importe quelle valeur,par exemple, vous pouvez trouver tous documents avec tag1 en utilisant la requête comme

q=tags:tag1

Ou utiliser les balises pour filtrer les résultats comme

q=query&fq=tags:tag1
69
répondu Umar 2011-11-24 10:36:29

MultiValued défini dans le schéma si le champ est autorisé à avoir plus d'une valeur.

Par exemple:
si j'ai un fieldType appelé ID qui est multiValued = false indexant un document comme celui-ci:

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

Provoquerait une exception dans le thread d'indexation et le document ne sera pas indexé (la validation du schéma échouera).

D'autre part, si j'ai plusieurs valeurs pour un champ, je voudrais définir plusieurs valeurs=true afin de garantir cette indexation est effectuée correctement, par exemple:

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

Dans ce cas, vous définissez "keywords" comme un champ à valeurs multiples.

14
répondu Asaf 2011-04-27 07:33:31

J'utilise plusieurs champs de valeur uniquement avec copyfields, alors pensez de cette façon, disons que tous les champs seront à valeur unique sauf s'il s'agit d'un copyfield, par exemple j'ai les champs suivants:

<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"/>

Je veux interroger un seul champ et éventuellement rechercher les 4 champs ci-dessus, alors nous devons utiliser copyfield. tout d'abord pour créer un nouveau champ appelez 'all', puis copiez tout dans ' all '

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

Maintenant, le champ ' all ' doit être à valeurs multiples.

12
répondu waynet 2011-11-15 10:59:25