indexing full-text-search solr multivalue

indexing - ¿Para qué sirve el tipo de campo "multiValued" en Solr?



full-text-search (3)

Soy nuevo en Apache Solr. Incluso después de leer la parte de documentation , me resulta difícil comprender claramente la funcionalidad y el uso de la propiedad de tipo de campo multiValued .

¿Qué internamente Solr hace / trata / maneja un campo que está marcado como multiValued ?

¿Cuál es la diferencia en la indexación en Solr entre un campo que tiene múltiples Valuaciones y las que no?

¿Alguien puede explicar con un buen ejemplo?

Doc dice:

multiValued = true | false

Es cierto si este campo puede contener múltiples valores por documento, es decir, si puede aparecer varias veces en un documento


Un campo multivalor es útil cuando hay más de un valor presente para el campo. Un ejemplo fácil serían las etiquetas, puede haber múltiples etiquetas que necesitan ser indexadas. así que si tenemos el campo de etiquetas como multivalor, la respuesta del solr devolverá una lista en lugar de un valor de cadena. Un punto a tener en cuenta es que debe enviar varias líneas para cada valor de las etiquetas, como:

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

una vez que tenga todos los índices de valores, puede buscar o filtrar los resultados por cualquier valor, e, g. puedes encontrar todos los documentos con tag1 usando query como

q=tags:tag1

o usa las etiquetas para filtrar resultados como

q=query&fq=tags:tag1


Utilizo campos de valores múltiples solo con campos de copia, así que piense de esta manera, digamos que todos los campos serán de un solo valor a menos que sea un campo de copia, por ejemplo, tengo los siguientes campos:

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

Quiero consultar solo un campo y posiblemente buscar los 4 campos anteriores, luego tenemos que usar copyfield. primero para crear una nueva llamada de campo ''todo'', luego copiar todo en ''todo''

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

Ahora el campo ''todos'' debe ser multivaluado.


multiValued define en el esquema si el campo tiene más de un valor.

Por ejemplo:
si tengo un FieldType llamado ID que es multiValued = falso indexando un documento como este:

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

provocaría una excepción en el hilo de indexación y el documento no se indexará (la validación del esquema fallará).

Por otro lado, si tengo varios valores para un campo, me gustaría establecer multiValued = true para garantizar que la indexación se realice correctamente, por ejemplo:

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

En este caso, definiría "palabras clave" como un campo de valor múltiple.