在Elasticsearch中返回不同的值

时间:2016-12-26 21:15:03

标签: elasticsearch elasticsearch-plugin

我正在尝试解决一个问题,我必须在搜索中获得明显的结果。

{
        "name" : "ABC",
        "favorite_cars" : [ "ferrari","toyota" ]
      }, {
        "name" : "ABC",
        "favorite_cars" : [ "ferrari","toyota" ]
      }, {
        "name" : "GEORGE",
        "favorite_cars" : [ "honda","Hyundae" ]
      }

当我对喜爱的汽车“ ferrari ”执行一个术语查询时。我得到两个名称为 ABC 的结果。我只是希望在这种情况下返回的结果应该是1。所以我的要求是,如果我可以在名称字段上应用不同的接收1个结果。

谢谢

1 个答案:

答案 0 :(得分:1)

实现目标的一种方法是在terms字段上使用name聚合,然后在尺寸为1的top_hits sub-aggregation上使用,如下所示:

{
  "size": 0,
  "query": {
    "term": {
      "favorite_cars": "ferrari"
    }
  },
  "aggs": {
    "names": {
      "terms": {
        "field": "name"
      },
      "aggs": {
        "single_result": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

这样,您将获得单个术语ABC,然后将其嵌套到一个匹配的文档中