Domanda

Sono nuovo di Apache Solr. Anche dopo aver letto parte della documentazione di , mi sto trovando difficoltà a capire in modo chiaro la funzionalità e l'uso della proprietà multiValued tipo di campo .

Cosa internamente Solr fa / leccornie / maniglie un campo che è contrassegnato come più valori ?

Qual è la differenza di indicizzazione in Solr tra un campo che è più valori e quelli che non lo sono?

Qualcuno può spiegare con qualche buon esempio?

Il dottore dice:

multivalore = true | false

True se questo campo può contenere più valori per documento, cioè se può apparire più volte in un documento

È stato utile?

Soluzione

Un campo multivalore è utile quando vi sono più di un valore attuale per il campo. Un esempio semplice sarebbe tag, non ci può essere più tag che devono essere indicizzati. quindi se abbiamo campo tag come multivalore la risposta solr restituirà un elenco invece di un valore di stringa. Un punto da notare è che è necessario presentare più righe per ogni valore dei tag come:

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

Una volta che avete tutti l'indice di valori è possibile cercare o filtrare i risultati per qualsiasi valore, e, g. si possono trovare tutti i documenti con tag1 utilizzando domanda come

q=tags:tag1

o utilizzare i tag per filtrare i risultati come

q=query&fq=tags:tag1

Altri suggerimenti

multivalore definito nello schema se il campo è consentito di avere più di un valore.

Per esempio:
se ho un fieldType chiamato ID, che è più valori = false indicizzazione di un documento come questo:

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

causerebbe un'eccezione per essere gettato nel thread indicizzazione e il documento non verrà indicizzato (convalida dello schema fallirà).

D'altra parte, se io ho più valori per un campo vorrei impostare multivalore = True al fine di garantire che l'indicizzazione è fatto correttamente, ad esempio:

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

In questo caso si potrebbe definire "parole chiave" come un campo multivalore.

I utilizzare più campi di valore solo con copyfields, in modo da pensare in questo modo, dicono tutti i campi saranno singola valutato meno che sia un copyfield, per esempio ho seguenti campi:

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

Voglio interrogare un solo campo e possibilmente per cercare tutti i 4 campi di cui sopra, quindi abbiamo bisogno di usare copyfield. prima di creare una nuova chiamata campo 'tutto', quindi copiare tutto in 'all'

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

Ora 'all' bisogno di essere più valori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top