我一直在尝试使用必须查询bool,但我没有得到结果。
在伪SQL中:
SELECT * FROM info WHERE (ulevel= '1.3.10' or ulevel= '1.3.6') AND (@timestamp between '2017-06-05T07:00:00.000Z' and '2017-06-05T07:00:00.000Z')
这就是我所拥有的:
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "_all",
"query": "*"
},
"range": {
"@timestamp": {
"from": "2017-06-05T07:00:00.000Z",
"to": "2017-06-05T07:20:00.000Z"
}
},
"bool": {
"should": [
{"term": { "ulevel": "1.3.10"}},
{"term": { "ulevel": "1.3.6"}}
]
}
}
]
}
}
有没有人有解决方案?
非常感谢你。
答案 0 :(得分:2)
您可以对第一部分使用terms
查询,对第二部分使用范围查询
GET _search
{
"query": {
"bool": {
"must": [
{
"terms": {
"ulevel": [
"1.3.10",
"1.3.6"
]
}
},
{
"range": {
"@timestamp": {
"gte": "2017-06-05T07:00:00.000Z",
"lte": "2017-06-05T07:20:00.000Z"
}
}
}
]
}
},
"from": 0,
"size": 20
}
一些注释:
- 过滤包含与任何提供的字词匹配的字段的文档(未分析)
- 此外,你可以使用一些日期特殊配方与愤怒过滤器。请查看范围查询页面https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html#ranges-on-dates了解更多信息。
醇>
更新
为评论问题添加了from
和size
。