我是ElasticSearch的新手,正在学习它的dsl。我编写了两个查询,获取相同的结果集。
查询1
{ "query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"match": {
"vin": "okhifeb"
}
},
{
"match": {
"reportType": "OVERSPEEDING"
}
},
{
"range": {
"startTime": {
"gte": "2023-07-01T00:00:00"
}
}
},
{
"range": {
"endTime": {
"lte": "2023-07-18T00:00:00"
}
}
}
]
}
}
}
}
}
字符串
查询2
{
"query": {
"bool": {
"must": [
{
"terms": {
"vin.keyword": ["okhifeb"]
}
},
{
"match": {
"reportType": "OVERSPEEDING"
}
},
{
"range": {
"startTime": {
"gte": "2023-07-01T00:00:00"
}
}
},
{
"range": {
"endTime": {
"lte": "2023-07-18T00:00:00"
}
}
}
]
}
}
}
型
哪种查询更有效?两个查询都有类似的took值。一般来说,哪一种更有效率--还是火柴?filter使查询效率如何,何时有用?
1条答案
按热度按时间bcs8qyzn1#
第一个,因为你的约束是关于精确匹配的,你不需要评分,
bool/must
必然意味着评分。重写了优化查询,但没有不必要的嵌套
bool/must
:字符串