Elasticsearch返回不同的结果

问题描述:

这里是我的ES查询:Elasticsearch返回不同的结果

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

与此查询,我得到对{AUTHORID,AUTHORNAME}的列表。这个列表重复{authorid,authorname}的值,我只需要得到相同的列表,但没有重复。这似乎并不困难,至少这是我今天上午想到的。我对ES的一些小知识以及缺乏文档使我不顾一切地找到解决这样一个小问题的办法。

当然,我可以通过代码获取整个列表并删除重复,但如果可能的话,我会优先考虑不接收不必要的数据,以便在事后删除它。

任何人都可以帮忙吗?我应该使用其他方法吗?

在此先感谢!

+0

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

+0

好吧,我明白了,但这是否意味着没有方式来获得结果('命中'数组)过滤不同的值?我的意思是,我需要通过authorid'选择distinct',所以'bucket'数组对我没有用(一个ID数组在前端没有提示),'hit'数组仍然包含重复值。我开始认为我需要这样做,并通过代码过滤不同的值。现在我会这样做,但如果有人可以确认这是唯一的方式,还是有一些解决方法可以将结果直接从ES结果中直接筛选出来,我将非常感激。谢谢btw! – user3407868

我会建议使用source filtering

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

它一般是比较容易处理比场,有时看起来象一个笛卡尔乘积。

+0

谢谢nefo_x,我试过了,但我一直在收到重复的值。 – user3407868