2012-09-05 16 views
5

Tengo consultas facetadas que trabajan con elasticsearch 0.19.9. Sin embargo, me gustaría volver todas las facetas que tienen un recuento> 0.elasticsearch número de facetas devueltas

De acuerdo con la documentación que debería ser capaz de:

{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "tag" : { 
      "terms" : { 
       "field" : "tag", 
       "all_terms" : true 
      } 
     } 
    } 

}

Según entiendo, esto debería dar mi todo facetas incluso si el recuento es 0.

Sin embargo, esto solo está devolviendo las 10 facetas principales por recuento. Cual es el tamaño predeterminado Lo único que parece afectar el número de facetas devueltas es establecer realmente "size" : N donde N es la cantidad de facetas que se devolverán.

Podría establecer esto en un número muy alto, pero eso parece ser un hack-ish.

¿Alguna idea sobre lo que puedo estar haciendo mal?

Respuesta

4

No está haciendo nada mal. ¡Lo descubriste correctamente! Hay un open issue en github para hacer que los términos sean similares al Terms Stats facet que le permite establecer el tamaño = 0 para recuperar todos los términos. Por ahora solo necesitas usar un valor alto, lo cual es un poco complicado, estoy de acuerdo. ¡Por otro lado, tenga cuidado de no devolver demasiadas entradas!

+1

Gracias por los comentarios ... Aunque no era lo que quería escuchar. –

+0

Creo que la pregunta común es realmente cómo filtrar los términos que tienen un recuento que es mayor que 0. es decir, contar> 0, después de hacer una variable de términos. Los términos Facet dan los recuentos, pero también queremos filtrar los recuentos. –

3
{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "facets" : { 
     "tag" : { 
      "terms" : { 
       "field" : "tag", 
       "size" : 2147483647, 
       "all_terms" : false 
      } 
     } 
    } 
} 

La única manera de eliminar el "count: 0" es poner "all_terms" como falso y programe el número de tamaño tan alto y tan imposible como pueda en su caso Elasticsearch (el ejemplo anterior es el el mayor valor firmado que un entero en PHP puede tener).

Puede que no sea la mejor manera, pero este es el único enfoque conocido hasta ahora. El filtro de faceta no funciona con esto actualmente (a menos que hayan actualizado y mejorado Elasticsearch para hacerlo).

+1

No tengo demasiados términos. Este enfoque funcionó perfectamente bien para mí. Los resultados de búsqueda fueron lo suficientemente rápidos. ¡Gracias! – anbiniyar

Cuestiones relacionadas