如何合并在ElasticSearch多个查询(How do I combine multiple q

2019-08-02 15:30发布

仅供参考这里是代码。 我试图做一个hubot插件,记录到elasticsearch,然后使用hubot命令来搜索这些日志。

https://gist.github.com/4050748

我想匹配检索两个查询的记录。

{ 
  query: { 
        match: {
          user: "SomeUsername" 
        }, 
        range: {
          date: {
            from: (Date.now() - 3600) 
          }
        }
  },
  size: 50 
}

我期待:

  • 多达50条记录
  • 这有给定用户记录
  • 在过去一小时记录

我有:

  • 多达10条记录
  • 这有给定用户记录
  • 从任何时间

如何获得所有在过去一小时某些用户名的记录? 我需要有过滤器使用MATCH_ALL? 就是我试图不支持?

在SQL它会是这样的:

Select (*) from messages where user_name = ? and time > ?

Answer 1:

您需要使用布尔查询到不同的查询组合在一起。 然后,您可以选择每单查询是否必须匹配,应该匹配(可选),或者必须不匹配。



Answer 2:

对于任何人谁绊倒在这个问题上,并想知道它是什么样子在ElasticSearch匹配和范围查询相结合,这个例子看起来像

curl 'localhost:9200/<index>/_search?pretty=true' -d '{
  "query" : {
    "bool": {
      "must": [
        {
          "match": {
            "user": "SomeUsername"
          }
        },
        {
          "range" : {
            "date": {
              "gt": "now-1h"
            }
          }
        }
      ]
    }
  }
}'


文章来源: How do I combine multiple queries in ElasticSearch