我回顾了保存的一些查询,看来我已经设法通过三种不同的方式实现了相同的查询。它们都返回相同的数据,但是哪一个是“正确的”?即,哪个不包含多余的代码,并且性能最高?
选项1
{
"query":{
"bool":{
"must":[
{
"match":{
"event":"eventname"
}
},
{
"range":{
"@timestamp":{
"gt":"now-70s"
}
}
}
]
}
},
"aggs":{
"myterms":{
"terms":{
"field":"fieldname"
}
}
}
}
选项2
{
"query":{
"filtered":{
"filter":{
"bool":{
"must":[
{
"match":{
"event":"eventname"
}
},
{
"range":{
"@timestamp":{
"gt":"now-70s"
}
}
}
]
}
}
}
},
"aggs":{
"myterms":{
"terms":{
"field":"fieldname"
}
}
}
}
选项3
{
"query":{
"filtered":{
"query":{
"bool":{
"must":[
{
"match":{
"event":"eventname"
}
},
{
"range":{
"@timestamp":{
"gt":"now-70s"
}
}
}
]
}
}
}
},
"aggs":{
"myterms":{
"terms":{
"field":"fieldname"
}
}
}
}
如果我猜到了,我会选择选项2,因为其他选项似乎显示它们正在作为查询运行。但是有关DSL查询应采用的正确格式的文档非常令人困惑。
最佳答案
根据您的评论,我会选择选项2,但为启动器提供一个简单的term
过滤器,而不是过滤器中不允许的match
。
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"event": "eventname"
}
},
{
"range": {
"@timestamp": {
"gt": "now-70s"
}
}
}
]
}
}
}
},
"aggs": {
"myterms": {
"terms": {
"field": "event"
}
}
}
}
关于elasticsearch - 哪个DSL对执行预过滤查询是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30601233/