2012-05-23 14 views

Respuesta

34

La forma canónica es la siguiente:

fieldName:[* TO *] 

El uso de un '' en el lado izquierdo como se sugiere Paige Cook, probablemente trabajar también, pero no me fío tanto como lo hago arriba. Y dado que esto es para un campo Ubicación, probablemente tendrá que hacer esto contra uno de los dos campos subyacentes reales contra este campo compuesto lógico. Comienzan con fieldName y terminan con algún tipo de sufijo numérico; mira en el navegador de esquemas para ver cuál es el nombre real.

Una cosa importante a tener en cuenta aquí es que una consulta como esta es costosa para Solr ya que hace un escaneo de índice completo en este campo. Si tiene muchos valores de campo de ubicación distintos (¿miles en adelante?), Entonces esto es un gran problema. Si haces esto en una consulta de filtro, entonces se almacenará en caché y es quizás discutible. Si desea que esta consulta se ejecute rápidamente, en el momento del índice debe indexar un campo booleano para indicar si hay un valor en este campo o no.

+0

Gracias a David, la sintaxis [* TO *], combinada con la comprobación de ambos campos de respaldo, parece funcionar correctamente (por ejemplo, 'field_0_coord: [* TO *] AND field_1_coord: [* TO *]'). ¡Gracias por el consejo de rendimiento también! – STW

+1

No tiene que hacer esto contra los dos campos de coordenadas, que es el doble de lento, solo uno. Si uno tiene un valor, el otro lo hace, y viceversa. –

6

Puede agregar esto a su consulta fieldname:['' TO *]. Esto será el equivalente de una verificación NOT NULL.

Tengo este del poste - Solr - Field Not Null Searches

+0

Gracias Paige, pero desafortunadamente eso no parece funcionar para que el 'Location' – STW

+0

se expanda un poco más, el campo así como los campos de respaldo son numéricos; evaluarlos contra '' ''resultados en una excepción NumberFormatException – STW

+0

Lamento haber echado de menos que esto era numérico. David Smiley tiene la respuesta correcta. –

4

Para un campo de ubicación (solr.LatLonType), utilice la siguiente consulta de filtro: -fieldName:[-90,-180 TO 90,180] (las coordenadas fuera de este rango son todavía válidos)

-2

probar este q= !fieldname:NULL este será equivalente a Fieldvalue no es nulo.

Preguntado por STW Tengo un índice de Solr con un conjunto de coordenadas almacenadas como un tipo de ubicación; Me gustaría consultar documentos donde este campo tiene un valor no nulo.

¿Cuál es la sintaxis de la consulta para realizar la comprobación NOT NULL en un campo de ubicación?

Cuestiones relacionadas