2009-08-27 12 views
29

Deseo realizar una búsqueda en un campo de texto en Solr. Quiero devolver todas las coincidencias en un rango o donde no hay ningún valor. Las dos búsquedas son independientes:Búsqueda de rango de fechas o campo nulo/nulo en Solr

myfield:[start TO finish] 
-myfield:[* TO *] 

La primera devuelve todas las coincidencias del rango. El segundo devuelve todas las coincidencias que no tienen valor para el campo "myfield". El problema es combinar estos dos.

Esto no devolvió coincidencias:

myfield:[start TO finish] OR -myfield:[* TO *] 

Esto devuelve coincidencias entre el comienzo y el final, pero no entradas nulas:

myfield:[start TO finish] OR (-myfield:[* TO *]) 
+0

Pruebe [this] (http://stackoverflow.com/questions/634765/using-or-and-not-in-solr-query/). –

+0

@samkass: de acuerdo, Solr debería detectar esto y reescribir internamente la expresión a algo que pueda manejar. –

+0

¿Alguien presentó esto como un error en Solr JIRA? No veo ninguna razón por la cual la versión de lógica positiva no funcione. – samkass

Respuesta

2

Estoy de acuerdo con solución Mauricio Scheffer.

Si eso puede ayudar, lo transformó mi consulta inicial:

DocSource:"P" OR (DocSource:"E" AND (MyDate:[NOW TO *] OR -MyDate:[* TO *])) 

Para

DocSource:"P" OR (DocSource:"E" AND -(-MyDate:[* TO NOW] AND MyDate:[* TO *])) 

La primera consulta no funcionó como se esperaba en Solr 4.1.

4

La solución de Mauricio Scheffer funcionó para mí hasta que la incluí en la consulta completa. La consulta misma puede contener hasta tres campos con rangos y en algún punto intermedio Solr no pudo procesarla. he conseguido solucionarlo con la siguiente consulta:

(myfield:[start TO finish] OR (*:* NOT myfield:[* TO *])) 

Se woked incluso en mi consulta compleja, por lo que tal vez va a ayudar a alguien más.

Cuestiones relacionadas