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