Pregunta ¿Puedo buscar documentos de Solr por miembro de un campo de valor múltiple?


Tengo un conjunto de documentos Solr que contienen (entre otros campos) campos multivalor con datos porcentuales o -1 si el valor es nulo, p.

<doc>
    ...
    <arr name="alpha">
        <float>0.23</float>
        <float>0.23</float>
        <float>0.43</float>
    </arr>
    <arr name="beta">
        <float>0.52</float>
        <float>-1.0</float>
        <float>0.34</float>
    </arr>
    <arr name="gamma">
        <float>-1.0</float>
        <float>-1.0</float>
        <float>-1.0</float>
    </arr>
    ...
</doc>

Necesito encontrar documentos donde un campo multivalor contenga o no un determinado miembro para un conjunto completo de casos de prueba. Si puedo hacer funcionar cualquiera de las siguientes consultas, sería de gran ayuda ubicar un documento en particular entre varios cientos de miles:

1) ¿Puedo encontrar un documento donde ninguna de los miembros de un campo multivalor específico cumplen un cierto criterio? (El documento anterior se devolvería si preguntara "alfa no tiene miembros que coincidan con -1").

2) ¿Puedo encontrar un documento donde al menos uno de los miembros de un campo multivalor específico cumple un cierto criterio? (El documento anterior se devolvería si preguntara "alfa tiene al menos un miembro> 0" o "beta tiene al menos un miembro> 0".)

Estoy asumiendo que una consulta como alpha:[0 TO 1] no funciona porque el campo es una matriz en lugar de un escalar. Una respuesta definitiva de "Esto es imposible" es tan útil como la respuesta de "Así es como lo haces", gracias de antemano.

EDITAR: Al igual que con tantos problemas, la respuesta es "vuelva a verificar sus suposiciones", específicamente, el desarrollador que generó nuestros documentos desactivó la indexación en los campos de porcentaje.


5
2017-08-31 16:40


origen


Respuestas:


  1. Sí. -alpha:"-1.0" logra esto

  2. Tu propio ejemplo, alpha:[0 TO 1], es la solución.

En pocas palabras, por qué funciona esto: cada campo no es un valor o una matriz, sino un vector de términos. Consultar un campo para un determinado término es una solicitud de inclusión (o exclusión), no una operación de igualdad.

La matriz a la que hace referencia forma parte del conjunto de resultados, que son datos almacenados sin formato que Solr devuelve como parte de los resultados de búsqueda.


6
2017-08-31 16:56



Ciertamente es posible.

Usualmente uso el parámetro FQ (consulta de filtro) para obtener lo que quieres: http://wiki.apache.org/solr/CommonQueryParameters#fq

Pero también puedes lanzarlo a la consulta.

Solución para el # 1:

fq=-alpha:-1.0

Filtra todo lo que tenga alfa igual a -1.0

No estoy seguro acerca de la solución # 2. ¿Has probado el código que mencionaste?

fq=beta:[0.0 TO 1.0]

No tengo un buen conjunto de datos de muestra para probar.


2
2017-08-31 16:51