Elasticsearch - 定位错误语法、定制排序规则
定位错误语法
比如查询一个name/desc中包含google的数据,结果输入关键词有误,就会包错,
"unknown query [mul_match] did you mean any of [multi_match, match]?"
GET /book01/_search
{
"query": {
"mul_match": {
"query": "google",
"fields": ["name", "desc"] # 搜索涉及的字段列表
}
}
}
排查错误位置:
通过 GET /{index}/_validate/query?explain + 查询条件
GET /book01/_validate/query?explain
{
"query": {
"mul_match": {
"query": "google",
"fields": ["name", "desc"] # 搜索涉及的字段列表
}
}
}
查询条件合法的情况下会返回搜索的目标等信息
GET /book01/_validate/query?explain
{
"query": {
"multi_match": {
"query": "google",
"fields": ["name", "desc"] # 搜索涉及的字段列表
}
}
}
场景:一般用在那种特别复杂庞大的搜索下,比如你一下子写了上百行的搜索,这时可以先用validate api去验证一下,搜索是否合法。
合法以后,explain就像mysqI的执行计划,可以看到搜索的目标等信息。
定制排序规则
默认情况下,是按照_score降序排序的,然而,某些情况下,可能没有有用的_score,比如说filter
只使用过滤器的方式查询数据:
错误方式:
GET /book/_search
{
"query": {
"filter": {
"range": {
"price": {
"gte": 7,
"lte": 20
}
}
}
}
}
正确方式: 使用关键词:constant_score
GET /book/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"price": {
"gte": 7,
"lte": 20
}
}
}
}
}
}
此时返回的 "_score": 1
想要将通过filter查询出的数据在再根据某个字段排序时,写法:
GET /book/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"price": {
"gte": 7,
"lte": 20
}
}
}
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
分类:
Elasticsearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧