2012-09-05 48 views
5

我有使用elasticsearch 0.19.9的分面查詢。不過,我想回到那個有計數> 0elasticsearch返回的面數

根據該文件,我應該能夠把所有方面:

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

}

據我所知,這應該給我的一切即使計數爲0.

但是,這仍然只是通過計數返回前10個方面。這是默認大小。似乎影響返回構面數的唯一方法是實際設置"size" : N,其中N是將返回的構面數。

我可以將它設置爲非常高的數字,但這似乎只是黑客。

任何想法,我可能做錯了什麼?

回答

4

你沒有做錯什麼。你正確地想出了它!在github上有一個open issue,使術語方面類似於Terms Stats facet,它允許您設置size = 0以便獲得所有條款。現在你只需要使用高價值,這有點棘手,我同意。另一方面小心不要返回太多的條目!

+1

感謝您的反饋......儘管這不是我想聽到的。 –

+0

我認爲常見的問題是如何過濾出計數大於0的項,即計數> 0,然後執行術語方面。方面術語給出了計數,但我們也想過濾計數。 –

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

刪除「數:0」的唯一方法是把「all_terms」爲假,並設置你的尺寸數量高,是不可能的,你可以在你的Elasticsearch實例(上面的例子是PHP中的整數可以具有最大的有符號值)。

這可能不是最好的方法,但這是目前唯一已知的方法。 Facet過濾器目前無法使用(除非他們更新並改進了Elasticsearch)。

+1

我沒有太多的條款。這種方法對我來說工作得很好。搜索結果足夠快。謝謝! – anbiniyar