使用Kibana的multi_match查询Elasticsearch遇parsing_exception错误求助
解决Elasticsearch multi_match查询的parsing_exception错误
嘿,我来帮你搞定这个问题!你遇到的parsing_exception错误根源很明确:multi_match查询的query参数只能接受字符串值,不能嵌套另一个查询对象。你原本的写法里把prefix查询塞到了multi_match的query字段里,这就违反了Elasticsearch的语法规则,所以才会报错说“在[query]之后遇到未知的START_OBJECT令牌”。
针对你的需求——在code和_id字段上执行前缀匹配,这里给你两种正确的实现方案:
方案1:使用bool查询结合多个prefix子句
这是最直接匹配你原始需求的写法,在code或_id字段上分别执行前缀匹配:
GET /_search { "query": { "bool": { "should": [ { "prefix": { "code": "M" } }, { "prefix": { "_id": "M" } } ] } } }
should子句表示只要满足其中一个条件的文档就会被返回,完全符合你想在多个字段上做前缀匹配的需求。
方案2:使用multi_match的phrase_prefix类型
如果你更倾向于用multi_match语法,可以指定type: phrase_prefix来实现类似前缀匹配的效果:
GET /_search { "query": { "multi_match": { "query": "M", "fields": ["code", "_id"], "type": "phrase_prefix" } } }
- 这个写法会在指定的
code和_id字段上,匹配以"M"开头的内容。需要注意的是,它会受字段分词器的影响,如果你的字段是不分词的(比如_id默认就是不分词的),效果和prefix查询几乎一致。
你可以根据自己的实际场景选择其中一种方案,替换掉原来错误的查询语句就可以正常获取记录啦~
内容的提问来源于stack exchange,提问作者Karthikeyan
相关产品推荐
相关产品推荐

