elasticsearch匹配两个字段

elasticsearch match two fields

如何在 elasticsearch 上获得这个简单的 SQL 查询 运行?

SELECT * FROM [mytype] WHERE a = -23.4807339 AND b = -46.60068

我的语法确实有问题,多匹配查询在我的情况下不起作用,我应该使用哪种查询类型?

您可以使用 and 过滤器来解决这个问题。对于您的示例,类似于:

{
  "size": 100,
  "query" : {"filtered" : {
    "query" : {"match_all" : {}},
    "filter" : {"and" : [
      "term" : {"a": -23.4807339},
      "term" : {"b": -46.60068}
    ]}
  }}
}

确保将查询指向正确的索引和类型。请注意,我将 return 的大小任意指定为 100 - 您必须指定适合您的用例的值。

过滤后的查询有更多内容 here, and more on the and filter here

对于像您这样的查询,bool 过滤器优于 and 过滤器。请参阅 here 有关此建议的完整故事以及为什么被认为更有效。

话虽如此,我会选择这样做:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {"term": {"a": -23.4807339}},
            {"term": {"b": -46.60068}}
          ]
        }
      }
    }
  }
}