2012-07-07 13 views
6

Estoy intentando usar ElasticSearch para análisis, específicamente para rastrear el "contenido superior" para Rails CMS enrollados a mano. El requisito es un poco más complicado que mantener un contador para cada contenido. No entraré en la profundidad del problema en este momento, ya que no puedo lograr que funcionen los conceptos básicos.Problema con los recuentos de facetas

Mi problema es este: estoy usando facetas y los recuentos no son lo que espero que sean. Por ejemplo:

Consulta:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":1,"all_terms":false,"order":"count"}}}} 

Resultado:

{"el_ids":{"_type":"terms","missing":0,"total":16672,"other":16657,"terms":[{"term":"quis","count":15}]}} 

Ok, grande, la pieza de contenido con id "quis" tenía 15 hits y desde el order es count, lo que debería ser mi parte superior de contenido. Ahora vamos a obtener las 5 mejores piezas de contenido.

Consulta:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":5,"all_terms":false,"order":"count"}}}} 

Resultado (sólo la faceta):

[ 
    {"term":"qgz9","count":26}, 
    {"term":"quis","count":15}, 
    {"term":"hnqn","count":15}, 
    {"term":"higp","count":15}, 
    {"term":"csns","count":15} 
] 

Huh? Entonces, ¿el contenido w/id "qgz9" tuvo más hits con 26? ¿Por qué no fue el resultado principal en la primera consulta?

De acuerdo, consigamos los mejores 100 ahora.

Consulta:

{"facets":{"el_ids":{"terms":{"field":"el_id","size":100,"all_terms":false,"order":"count"}}}} 

Resultados (sólo la faceta):

[ 
    {"term":"qgz9","count":43}, 
    {"term":"difc","count":37}, 
    {"term":"zryp","count":31}, 
    {"term":"u65r","count":31}, 
    {"term":"sxsi","count":31}, 
    ... 
] 

Así que ahora "qgz9" cuenta con 43 golpes en lugar de 26? ¿Como puede ser? Puedo asegurarle que no pasa nada en segundo plano modificando el índice. Si repito estas consultas, obtengo los mismos resultados.

Al repetir este proceso de aumentar el tamaño del resultado, los recuentos continúan cambiando y los nuevos identificadores de contenido emergen en la parte superior. ¿Puede alguien explicarme qué estoy haciendo mal o dónde está mal mi comprensión de cómo funciona?

Respuesta

7

Resulta que este es un known issue:

... la forma en subir N facetas trabajan ahora es imprescindible adquirir la parte superior de cada fragmento N, y la fusión de los resultados. Esto puede dar resultados inexactos.

De manera predeterminada, mi índice se creó con 5 fragmentos. Al cambiar esto para que el índice solo tenga un único fragmento, los recuentos se comportan en línea con mis expectativas. Otra solución consistiría siempre en establecer size en un valor mayor que el número de facetas esperadas y pelar los primeros N resultados.

+0

Esta no es la mejor manera de lograr eso. Sharding es una característica muy importante de Elasticsearch. Es posible que pierda mucho rendimiento si solo considera 1 fragmento. – eliasah

Cuestiones relacionadas