2012-07-07 76 views
6

我試圖使用ElasticSearch進行分析 - 特別是跟蹤手動導軌Rails CMS的「頂級內容」。這個要求比爲每件內容保留一個計數器要複雜得多。我現在不會深入到問題的深處,因爲我看起來連基本工作都看不到。與方面計數問題

我的問題是這樣的:我使用方面和計數是不是我期望他們是。例如:

查詢:

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

結果:

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

好,太好了,這塊ID爲 「QUIS」 有15支安打,因爲order含量count,它應該成爲我的首要內容。現在讓我們獲得前5個內容。

查詢:

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

結果(只是面):

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

咦?那麼這張有w/id「qgz9」的內容有26個更多的點擊率?爲什麼它不是第一個查詢中的最重要結果?

好吧,讓我們現在得到前100名。

查詢:

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

結果(只是面):

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

所以現在 「qgz9」 擁有43個安打,而不是26?怎麼可能?我可以向你保證在修改索引的後臺沒有任何事情發生。如果我重複這些查詢,我會得到相同的結果。

當我重複這個增加結果大小的過程時,計數不斷變化,新的內容ID出現在頂部。有人能向我解釋我做錯了什麼,或者我對這種工作方式的理解有缺陷嗎?

回答

7

事實證明,這是一個known issue

...一路前N個方面現在的工作是從各碎片獲取頂級N,和合並的結果。這可能會導致不準確的結果。

默認情況下,我的索引正在創建5個分片。通過改變這個因此索引只有一個碎片,計數表現符合我的期望。另一個解決方法是始終將size設置爲大於預期構面數的值,並剝離前N個結果。

+0

這仍然不是實現這一目標的好方法。分片是Elasticsearch的一個非常重要的特性。如果你只考慮1個分片,你可能會失去很多性能。 – eliasah 2014-08-25 07:47:43