elasticsearch - bool 查询不支持 [search_after] -- 弹性搜索错误
问题描述
我正在尝试同时查询我的索引并根据地理距离进行过滤,尽管通过我的索引进行分页但我得到了这个错误
错误:
{
"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
}
}
}
}
}
}
解决方案
尝试search_after
摆脱query
:
{
"query": {
"bool" : {
"should" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "150km",
"location" : {
"lat" : xxxx,
"lon" : xxxxx
}
}
}
}
}
search_after": [1463538857, "654323"]
}
因此,顾名思义search_after
,将在给定值后开始匹配。您需要为此指定一些排序。例如在文档中的示例
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 所需的值。
推荐阅读
- node.js - Laravel Mix: ValidationError: CSS Loader has been initialized using an options object that does not match the API schema
- github - 将 Github 上下文传递给 Javascript Action
- java - 在 Spring Boot 中使用 log4j2 构建项目时出错
- javascript - XMLHttpRequest 在新服务器上返回 403
- slider - 滑动滑块中的第三个滑块
- python - 如何从另一个数据框中获取值的行列名称
- excel - 防止物品库存量低于零的机制
- typescript - 将对象属性限制为另一个对象的属性
- html - 如何在 Node,js Web 应用程序中集成支付网关
- powershell - 如何使用 Powershell 在 Azure 函数的 http 触发器类型中传递开关参数