【问题标题】:Elasticsearch trying to query term and time rangeElasticsearch 尝试查询术语和时间范围
【发布时间】:2016-10-07 22:28:43
【问题描述】:

我正在尝试查找内容字段包含单词“syria”并且纪元时间大于 1465312440000 的所有文档。以下查询运行,但只返回包含单词“syria”的文档。我该如何解决这个问题?(Elasticsearch 2.2 版)

{
    "query": {
        "filtered": {
        "query": {
            "match": {
                "content": "syria"
            },
            "filter": {
                "term": {
                    "sourceOriginator": "Twitter"
                },
                "bool": {

                    "range": {
                        "epochCollectionDate": {
                            "gte": 1465312440

                        }
                    }
                }

            }

        }
    }
}
}

【问题讨论】:

    标签: json elasticsearch lucene


    【解决方案1】:

    当然没有数据很难测试,但是过滤器是错误的。它应该与第二个查询处于同一级别。我认为以下解决方案更容易:

    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "content": "syria"
              }
            }
          ],
          "filter": [
            {
              "term": {
                "sourceOriginator": "Twitter"
              }
            },
            {
              "range": {
                "epochCollectionDate": {
                  "gte": 1465312440
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      为了补充@Jettro 的解决方案,它只适用于 ES 2.0 及更高版本,以下解决方案将适用于 ES 5 之前的所有版本。

      {
        "query": {
          "filtered": {
            "query": {
              "match": {
                "content": "syria"
              }
            },
            "filter": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "sourceOriginator": "Twitter"
                    }
                  },
                  {
                    "range": {
                      "epochCollectionDate": {
                        "gte": 1465312440
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      }
      

      请注意,如果您使用的是 ES 2.0 或更高版本,您应该真正使用 @Jettro 的解决方案,因为 filtered 查询已在 2.0 中被弃用。

      【讨论】:

        【解决方案3】:

        谢谢各位。 我为此苦苦挣扎,所以如果有人也在寻找如何通过聚合来做到这一点,我使用了 winlogbeat,但它可以与其他索引一起使用,只需更改术语和字段名称。 我用 Elastic 7.1.1 对此进行了测试

        {
          "size": 0,
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "winlog.event_id": "5156"
                  }
                }
              ],
              "filter": [
                {
                  "term": {
                    "winlog.provider_name" : "Microsoft-Windows-Security-Auditing"
                  }
                },
                {
                  "range": {
                    "@timestamp": {
                                "gt": "now-10d",
                                "lt": "now"
                    }
                  }
                }
              ]
            }
          },
            "aggregations": {
                "event_count": {
                    "value_count": {
                        "field": "winlog.event_id"
                    }
                },
                "group_by_host": {
                    "terms": {
                        "field": "host.name",
                        "size": 10,
                        "min_doc_count": 1,
                        "shard_min_doc_count": 0,
                        "show_term_doc_count_error": false,
                        "order": [
                            {
                                "_count": "desc"
                            },
                            {
                                "_key": "asc"
                            }
                        ]
                    }
                },
        
           }
        }
        

        【讨论】:

          猜你喜欢
          • 2019-08-06
          • 2019-01-24
          • 2020-09-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多