2012-07-07 3 views
6

Sto tentando di utilizzare ElasticSearch per l'analisi, in particolare per tracciare "i contenuti migliori" per il CMS Rails fatto a mano. Il requisito è un po 'più complicato di tenere un contatore per ogni pezzo di contenuto. Non entrerò nella profondità del problema adesso, poiché non riesco a far funzionare le basi.Problemi con il conteggio delle faccette

Il mio problema è questo: sto usando gli sfaccettature ei conteggi non sono quello che mi aspetto che siano. Per esempio:

Query:

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

Risultato:

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

Ok, grande, il pezzo di contenuti con ID "quis" ha avuto 15 colpi e dal momento che il order è count, dovrebbe sii il mio primo pezzo di contenuto. Ora consente di ottenere i primi 5 pezzi di contenuto.

Query:

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

Risultato (solo la sfaccettatura):

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

Eh? Quindi il contenuto w/id "qgz9" ha avuto più hit con 26? Perché non è stato il primo risultato nella prima query?

Ok, ora prendiamo la top 100.

Query:

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

risultati (solo la sfaccettatura):

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

Così ora "qgz9" dispone di 43 colpi, invece di 26? Come può essere? Posso assicurarti che non sta accadendo nulla in background modificando l'indice. Se ripeto queste domande, ottengo gli stessi risultati.

Mentre ripeto questo processo di aumento della dimensione del risultato, i conteggi continuano a cambiare e nuovi ID di contenuto emergono in alto. Qualcuno può spiegarmi che cosa sto sbagliando o dove la mia comprensione di come funziona è difettosa?

risposta

7

Si scopre che si tratta di una known issue:

... il modo in cui prime N sfaccettature lavoro ora è quello di ottenere la parte superiore N da ogni frammento, e la fusione dei risultati. Questo può dare risultati inaccurati.

Per impostazione predefinita, il mio indice è stato creato con 5 frammenti. Modificando questo modo l'indice ha solo un singolo frammento, i conteggi si comportano in linea con le mie aspettative. Un'altra soluzione sarebbe quella di impostare sempre size su un valore maggiore del numero di sfaccettature attesi e rimuovere i primi risultati N.

+0

Questo non è ancora il modo migliore per riuscirci. Sharding è una caratteristica molto importante di Elasticsearch. Potresti perdere un sacco di prestazioni se consideri solo 1 frammento. – eliasah