2015-01-09 127 views
1

這裏是我的ES查詢:Elasticsearch返回不同的結果

{ 
    "fields": [ 
     "news.authorname.raw", 
     "news.authorid" 
    ], 
    "query": { 
     "filtered": { 
     "filter": { 
      "terms": { 
      "news.authorid": [ 
       1, 
       2 
      ] 
      } 
     } 
     } 
    } 
    } 

與此查詢,我得到對{AUTHORID,AUTHORNAME}的列表。這個列表重複{authorid,authorname}的值,我只需要得到相同的列表,但沒有重複。這似乎並不困難,至少這是我今天上午想到的。我對ES的一些小知識以及缺乏文檔使我不顧一切地找到解決這樣一個小問題的辦法。

當然,我可以通過代碼獲取整個列表並刪除重複,但如果可能的話,我會優先考慮不接收不必要的數據,以便在事後刪除它。

任何人都可以幫忙嗎?我應該使用其他方法嗎?

在此先感謝!

+0

看看這個[回答](https://stackoverflow.com/questions/24508191/elasticsearch-returning-only-documents-with-distinct-value) – notdang

+0

好吧,我明白了,但這是否意味着沒有方式來獲得結果('命中'數組)過濾不同的值?我的意思是,我需要通過authorid'選擇distinct',所以'bucket'數組對我沒有用(一個ID數組在前端沒有提示),'hit'數組仍然包含重複值。我開始認爲我需要這樣做,並通過代碼過濾不同的值。現在我會這樣做,但如果有人可以確認這是唯一的方式,還是有一些解決方法可以將結果直接從ES結果中直接篩選出來,我將非常感激。謝謝btw! – user3407868

回答

0

我會建議使用source filtering

{ 
    "_source": [ "news.authorname.raw", "news.authorid" ], 
    "query": { 
     "filtered": { 
     "filter": { 
      "terms": { 
      "news.authorid": [ 
       1, 
       2 
      ] 
      } 
     } 
     } 
    } 
    } 

它一般是比較容易處理比場,有時看起來象一個笛卡爾乘積。

+0

謝謝nefo_x,我試過了,但我一直在收到重複的值。 – user3407868