我想执行以下查询
SELECT *
FROM logs
WHERE dst != "-"
AND @timestamp > "a date before" AND @timestamp < "now"
我使用python elasticsearch sdk,并形成了两个用于测试的查询
from elasticsearch import Elasticsearch
from datetime import datetime, timedelta
now = datetime.now()
four_hours_before = now - timedelta(hours=4)
es = Elasticsearch("http://es.domain.com:9200")
query_bool_filter = {
'query': {
'bool': {'
filter': {
'bool': {
'must_not': {
'term': {
'dst': '-'
}
},
'must': {
'range': {
'@timestamp': {
'gte': four_hours_before,
'lte': now
}
}
}
}
}
}
}
}
和第二个使用must_not与过滤器分开的查询
query_bool_and_filter = {
'query': {
'bool': {
'filter': {
'range': {
'@timestamp': {
'gte': four_hours_before,
'lte': now
}
}
},
'must_not': {
'term': {
'dst': '-'
}
}
}
}
}
当我使用python sdk中的搜索执行查询时,我会比较返回结果中的总字段,它的不同之处如下:
res1 = es.search(index="myindex", body=query_bool_filter)
res2 = es.search(index="myindex", body=query_bool_and_filter)
res1.get('hits').get('total') #prints 43197
res2.get('hits').get('total') #prints 43215
为什么我会得到不同的数字,因为范围相同?