2011-09-09 14 views
8

Estoy chocando con un comportamiento extraño con - operadores en la sintaxis de consulta de Solr/Lucene. Si ejecuto la consultaComportamientos extraños de Solr/Lucene con operadores booleanos

-text AND -text 

Puedo obtener todos los resultados esperados (mucho), pero si pongo algunos paréntesis como

-text AND (-text) 

o

(-text) AND (-text) 

entonces consigo no hubo resultados todas. No puedo entender por qué. ¿Tiene una explicación para este comportamiento?

Gracias de antemano.

+0

posible duplicado de [utilizando OR y NO en la consulta solr] (http://stackoverflow.com/questions/634765/using-or-and-not-in-solr-query) –

Respuesta

10

La pregunta ha sido respondida muy bien en Solr mailing list. Asimismo, han añadido una entrada en la FAQ oficial, que dice:

consultas booleanas deben tener al menos una expresión "positivo" (es decir, debe o debería) con el fin de igualar. Solr trata de ayudar con esto, y si se le pide para ejecutar un BooleanQuery que hace sólo contiene cláusulas negada en el nivel superior, se añade un partido de toda consulta documentos (es decir: *: *)

Si el BoolenQuery nivel superior contiene en algún lugar dentro de ella una BooleanQuery anidada que contiene solo cláusulas negadas, esa consulta anidada no se modificará y (por definición) no coincidirá con ningún documento; si es necesario, eso significa que la consulta externa no coincidirá.

Así expresiones con valores únicos "negativas" que siempre devuelva 0 resultados, excepto en el nivel superior, donde el analizador silencio añadir un *:* al inicio de la consulta.

Por lo tanto -text AND -text se transforma en *:* -text AND -text y por lo que tiene resultados, mientras que (-text) no se transforma en (*:* -text), porque no está en el nivel superior, y así (-text) no da ningún resultado.

1

La explicación depende del manejador de búsqueda que está utilizando y toda la cadena de consulta.

Por ejemplo: se puede buscar en varios campos, como

text AND text < - el cual buscó en todos los campos (por defecto) - dependiendo del controlador de búsqueda

FIELD1:text AND text < - que utiliza AND buscar dentro de CAMPO1

FIELD1:text1 AND (-text2) < - busca (como recuerdo bien) para el texto1 en el CAMPO1 Y NO el texto2 en todos los demás documentos (por defecto), según el controlador de búsqueda.

Creo que, usando () cambia el alcance/los campos de la búsqueda.

Tal vez el comportamiento que describes tiene que ver con algo así?

+0

Mi campo predeterminado se llama "texto completo" ". El comportamiento no cambia si escribo texto completo: texto en lugar de texto ... –

Cuestiones relacionadas