Elasticsearch试图查询术语和时间范围

时间:2016-06-07 20:55:46

标签: json elasticsearch lucene

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

R2

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

只是为了补充@ 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中弃用。

答案 2 :(得分:0)

谢谢你们。 我为此感到吃力,因此,如果有人也在寻找如何通过聚合来做到这一点,我使用了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"
                    }
                ]
            }
        },

   }
}