弹性搜索查询根据查询字词返回的组结果

时间:2018-01-19 10:35:24

标签: elasticsearch

我对弹性搜索非常新。我正面临构建查询的问题。我的文档结构如下:

{
  latlng: {
    lat: '<some-latitude>',
    lon: '<some-longitude>'
  },
  gmap_result: {<Some object>}
}

我正在对lat-long的列表进行搜索。对于每个坐标,我获取的结果都在100米以内。我已经能够做到这一点。但是,棘手的部分是我不知道输出中的哪个结果对应于哪个查询项。我认为这需要在某种程度上使用聚合,但我目前对如何继续使用这一点毫无头绪。

1 个答案:

答案 0 :(得分:1)

聚合查询是正确的方法。你可以在这里了解它们:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html

以下是一个例子。在此示例中,我使用match查询在字段test中查找单词title的所有实例,然后汇总字段status以计算结果数使用每个状态中的test字样。

GET /my_index/_search
{
  "query": {
    "bool": {
      "must": [
       {
          "match": {
            "title": "*test*"
          }
        }
      ]
    }
  },
  "aggs": {
    "count_by_status": {
      "terms": {
        "field": "status"
      }
    }
  },
  "size": 0
}

结果如下:

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 346,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "count_by_status": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "Open",
          "doc_count": 283
        },
        {
          "key": "Completed",
          "doc_count": 36
        },
        {
          "key": "On Hold",
          "doc_count": 12
        },
        {
          "key": "Withdrawn",
          "doc_count": 10
        },
        {
          "key": "Declined",
          "doc_count": 5
        }
      ]
    }
  }
}

如果您提供查询,则可以帮助我们提供更具体的汇总查询供您使用。