elasticsearch - 带过滤器的 Elasticsearch 查询比不带过滤器的查询花费更多时间。为什么?
问题描述
我正在使用 Elasticsearch 版本(7.6.1)
使用过滤器查询是
GET mark13/_search
{
"explain": false,
"from": 0,
"size": 500,
"track_scores": true,
"stored_fields": [
"_source"
],
"sort": {
"_script": {
"type": "number",
"script": {
"id": "sorting_algo",
"params": {
"query": "abhinav keshri"
}
},
"order": "desc"
}
},
"script_fields": {
"poca_score": {
"script": {
"id": "field",
"params": {
"query": "abhinav keshri"
}
}
}
},
"query": {
"bool": {
"filter": [
{
"term": {
"class" : "42"
}
}
],
"should": [
{
"match": {
"applied_for": {
"query": "abhinav keshri",
"boost": 118,
"fuzziness": 0
}
}
},
...
...
...
上述查询的输出是
{
"took" : 45414,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : 4730.905,
"hits" : [
{
...
...
...
执行时间为 45414 毫秒。
没有过滤器的查询是
GET mark13/_search
{
"explain": false,
"from": 0,
"size": 500,
"track_scores": true,
"stored_fields": [
"_source"
],
"sort": {
"_script": {
"type": "number",
"script": {
"id": "sorting_algo",
"params": {
"query": "abhinav keshri"
}
},
"order": "desc"
}
},
"script_fields": {
"poca_score": {
"script": {
"id": "script",
"params": {
"query": "abhinav keshri"
}
}
}
},
"query": {
"bool": {
"should": [
{
"match": {
"applied_for": {
"query": "abhinav keshri",
"boost": 118,
"fuzziness": 0
}
}
},
...
...
...
上述查询的输出是
{
"took" : 7104,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 9920,
"relation" : "eq"
},
"max_score" : 4730.905,
"hits" : [
{
执行时间为 7104 毫秒。
我的期望是,与非过滤查询相比,过滤查询将花费更少的时间,因为应用布尔查询的结果更少。
我还尝试以不同的格式执行过滤器查询(上面给出的一种)-
我也尝试过以下格式。(它给了我相同的结果)。
{
"from": 0,
"size": 50,
"track_scores": true,
"stored_fields": [
"_source"
],
"sort": {
"_script": {
"type": "number",
"script": {
"id": "sorting_algo",
"params": {
"query": "abhinav keshri"
}
}
}
},
"script_fields": {
"poca_score": {
"script": {
"id": "script",
"params": {
"query": "abhinav keshri"
}
}
}
},
"query": {
"bool": {
"should": [
],
"filter": [
{
"bool": {
"should": [
{
...
...
}
],
"must": {
"bool": {
"should": [
{
"terms": {
"class": [
"42"
]
}
},
...
...
]
}
}
}
}
]
}
}
}
问题为什么过滤查询比非过滤查询花费更长的时间?
解决方案
推荐阅读
- laravel - Laravel 8.x 顺风前缀
- symfony - 在 symfony 5 中配置 DateTimeNormalizer 的最佳方法是什么
- postman - 邮递员监视器失败错误:中止运行,因为它似乎已挂起
- reactjs - 我有一个包含许多模块的 React 项目。单独托管还是一起托管更好?
- javascript - 使用Angular中的反应形式从字段动态?
- sql-server - T-SQL GROUP BY 也使用 JOIN、聚合和外部引用错误
- javascript - 使用 css 的圆圈内的细箭头(用于 React)
- powerbi - 导出基础数据未正确过滤
- android-studio - 如何在recyclerview的模拟器上显示listItem?
- python - 在 python 中打开没有 SIMPLE 关键字的文件