web-dev-qa-db-fra.com

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

Je suis nouveau à Apache Solr. Même après avoir lu la partie documentation , je trouve qu'il est difficile de comprendre clairement la fonctionnalité et l'utilisation de la propriété de type de champ multiValued.

En interne, qu'est-ce que Solr traite/traite/gère un champ marqué comme multiValued ?

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

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

Doc dit:

multiValued = true | false

Vrai si ce champ peut contenir plusieurs valeurs par document, c’est-à-dire s’il peut apparaître plusieurs fois dans un document

71
Gnanam

Un champ à plusieurs valeurs est utile lorsque plusieurs valeurs sont présentes pour le champ. Un exemple simple serait les balises, il peut y avoir plusieurs balises qui doivent être indexées. Donc, si nous avons le champ tags en tant que valeur multiple, la réponse de solr renverra 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 tout l’index des valeurs, vous pouvez rechercher ou filtrer les résultats selon n’importe quelle valeur, par exemple. vous pouvez trouver tous les documents avec tag1 en utilisant une requête comme

q=tags:tag1

ou utilisez les balises pour filtrer les résultats comme

q=query&fq=tags:tag1
73
Umar

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 tel que celui-ci:

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

provoquerait une exception dans le fil d'indexation et le document ne serait pas indexé (la validation du schéma échouera).

Par contre, si j’ai plusieurs valeurs pour un champ, je voudrais définir multiValued = true afin de garantir que l’indexation est correctement effectuée, par exemple:

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

Dans ce cas, vous définiriez les "mots-clés" comme un champ à valeurs multiples.

15
Asaf

J'utilise plusieurs champs de valeur uniquement avec les champs de copie, alors pensez de cette façon, supposons que tous les champs ont une valeur unique, sauf s'il s'agit d'un champ de copie, 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 chercher dans les 4 champs ci-dessus, alors nous devons utiliser copyfield. commencez par créer un nouveau champ appelé "all", puis copiez le tout dans "all"

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

Maintenant, les champs "tous" doivent être multi-évalués.

12
waynet