2012-07-07 6 views
6

Ich versuche, ElasticSearch für Analysen zu verwenden - speziell um "Top-Inhalte" für hand-rolled Rails CMS zu verfolgen. Die Anforderung ist ein wenig komplizierter, als einen Zähler für jedes Stück Inhalt zu führen. Ich werde jetzt nicht in die Tiefe des Problems kommen, da ich nicht einmal die Grundlagen zum Laufen bringen kann.Probleme mit Facetten zählen

Mein Problem ist das: Ich benutze Facetten und die Zählungen sind nicht, was ich von ihnen erwarte. Zum Beispiel:

Abfrage:

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

Ergebnis:

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

Ok, super, das Stück von Inhalten mit der ID "Quis" 15 Hits hatte und seit den ordercount ist, sollte es sei mein oberstes Stück Inhalt. Jetzt können wir die 5 besten Teile des Inhalts bekommen.

Abfrage:

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

Ergebnis (nur die Facette):

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

Huh? Also hatte das Stück Inhalt w/id "qgz9" mehr Treffer mit 26? Warum war es nicht das beste Ergebnis in der ersten Abfrage?

Ok, lass uns jetzt die Top 100 bekommen.

Abfrage:

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

Ergebnisse (nur die Facette):

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

So, jetzt "qgz9" hat 43 Treffer statt 26? Wie kann das sein? Ich kann Ihnen versichern, dass im Hintergrund nichts passiert, was den Index verändert. Wenn ich diese Abfragen wiederhole, bekomme ich die gleichen Ergebnisse.

Während ich diesen Vorgang der Erhöhung der Ergebnisgröße wiederhole, ändern sich die Zählwerte weiter und neue Inhalts-IDs werden oben angezeigt. Kann mir jemand erklären, was ich falsch mache oder wo mein Verständnis davon, wie das funktioniert, fehlerhaft ist?

Antwort

7

Es stellt sich heraus, dass dies ein known issue:

... die Art und Weise Top-N Facetten jetzt arbeitet, ist durch den Top-N von jedem Shard bekommen, und die Ergebnisse zusammengeführt werden. Dies kann zu ungenauen Ergebnissen führen.

Standardmäßig wurde mein Index mit 5 Shards erstellt. Wenn Sie dies so ändern, dass der Index nur einen einzigen Shard enthält, verhalten sich die Counts in Übereinstimmung mit meinen Erwartungen. Eine andere Problemumgehung wäre, immer size auf einen Wert festzulegen, der größer als die Anzahl der erwarteten Facetten ist, und die oberen N-Ergebnisse abzuziehen.

+0

Dies ist immer noch nicht der gute Weg, das zu erreichen. Das Sharding ist ein sehr wichtiges Merkmal von Elasticsearch. Sie können viel Leistung verlieren, wenn Sie nur einen Splitter in Betracht ziehen. – eliasah