bool查询不支持[search_after]-弹性搜索错误

时间:2020-02-04 17:33:59

标签: elasticsearch elastic-stack elk

虽然我试图通过索引进行分页,但我想同时查询索引并根据地理距离进行过滤,但我可能会收到此错误

错误:

SELECT 'extensionTable'.*, '@dist:=... ' AS 'distance';

实际查询:

{
    "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
}

1 个答案:

答案 0 :(得分:0)

尝试从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提供所需的值。