虽然我试图通过索引进行分页,但我想同时查询索引并根据地理距离进行过滤,但我可能会收到此错误
错误:
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
}
答案 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"}
]
}
首先根据date
和tie_breaker_id
字段对文档进行排序,因此"search_after": [1463538857, "654323"]
语句意味着在日期1463538857
和tie_breaker_id "654323"
之后开始搜索
因此,您需要在此处基于某些字段对文档进行排序,然后向search_after提供所需的值。