elasticsearch匹配两个领域

时间:2015-02-06 12:48:21

标签: sql elasticsearch geolocation match

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

  

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

我的语法真的很麻烦,多匹​​配查询在我的情况下不起作用,我应该使用哪种查询类型?

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

您可以使用and过滤器进行处理。对于您的示例,例如:

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

确保根据正确的索引和类型指示查询。请注意,我将返回集的大小任意指定为100 - 您必须指定一个适合您的用例的值。

有关过滤查询here的更多内容,以及and过滤器here上的更多内容。