问题背景
一个查询语句在测试集群可以正常跑,但是在本地集群无法正常跑的问题
查询语句如下
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must_not": {
"term": {
"delete": 1
}
},
"should": {
"dis_max": {
"queries": [
{
"match": {
"answer": {
"query": [
"聊天"
],
"type": "boolean"
}
}
}
]
}
}
}
}
}
查询上面语句在本地集群会得到如下错误
"error" : {
"root_cause" : [ {
"type" : "parsing_exception",
"reason" : "[match] unknown token [START_ARRAY] after [query]",
"line" : 6,
"col" : 17
} ],
"type" : "parsing_exception",
"reason" : "[match] unknown token [START_ARRAY] after [query]",
"line" : 6,
"col" : 17
},
"status" : 400
}
主要的意思就是match后面不能跟数组形式查询
问题排查
排查过众多语法因素后认为应该是外力,测试集群版本2.3.5,本地集群版本2.4.6
上elasticsearch的github中搜索issue看有没有类似的问题,否则我就自己提一个了。
然后看到一个issue提到了该问题,上地址
github该问题讨论
确实是bug
解决方式
那就只能回调回2.3.5版本和线上保持一致
这里吹一波docker,只需要改配置文件一下,总共不到20s从2.4.6切换成为2.3.5版本
不过这也是因为是小版本切换,底层使用的lucene版本一样,索引可以无缝切换
这里放一个我之前写的如何用docker快速建立es环境的博客
使用docker-compose构建elasticsearch集群
将文中配置文件改为2.3.5即可完成
网友评论