【问题标题】:bool query does not support [search_after] -- Elastic Search errorbool 查询不支持 [search_after] -- 弹性搜索错误
【发布时间】:2020-02-05 02:29:24
【问题描述】:

我正在尝试同时查询我的索引并根据地理距离进行过滤,尽管通过我的索引进行分页,但我得到了这个错误

错误:

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "bool query does not support [search_after]",
                "line": 7,
                "col": 21
            }
        ],
        "type": "parsing_exception",
        "reason": "bool query does not support [search_after]",
        "line": 7,
        "col": 21
    },
    "status": 400
}

实际查询:

{
    "query": {
        "bool" : {
            "should" : {
                "match_all" : {}
            },
            "search_after": [1463538857, "654323"],
            "filter" : {
                "geo_distance" : {
                    "distance" : "150km",
                    "location" : {
                        "lat" : xxxx,
                        "lon" : xxxxx
                    }
                }
            }
        }
    }
 }

【问题讨论】:

    标签: elasticsearch elastic-stack elk


    【解决方案1】:

    尝试将search_after 放在query 之外:

    {
        "query": {
            "bool" : {
                "should" : {
                    "match_all" : {}
                },
                "filter" : {
                    "geo_distance" : {
                        "distance" : "150km",
                        "location" : {
                            "lat" : xxxx,
                            "lon" : xxxxx
                        }
                    }
                }
            }
        }
        search_after": [1463538857, "654323"]
     }
    

    顾名思义,search_after 将在给定值后开始匹配。您需要为此指定一些排序。比如来自documentation的例子

    GET twitter/_search
    {
        "size": 10,
        "query": {
            "match" : {
                "title" : "elasticsearch"
            }
        },
        "search_after": [1463538857, "654323"],
        "sort": [
            {"date": "asc"},
            {"tie_breaker_id": "asc"}
        ]
    }
    

    首先根据datetie_breaker_id 字段对文档进行排序,因此"search_after": [1463538857, "654323"] 语句意味着在日期1463538857 和tie_breaker_id "654323" 之后开始搜索

    所以你需要在这里做的是根据某个字段对文档进行排序,然后提供 search_after 所需的值。

    【讨论】:

    • 谢谢你我照你说的做了。旧的错误已经消失,现在我面临另一个错误,你能帮忙吗? "reason": "排序必须至少包含一个字段。""
    • 你能帮忙解决这个问题吗stackoverflow.com/questions/60991499/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2014-11-09
    相关资源
    最近更新 更多