Kibana查询Elasticsearch遇parsing_exception错误:未注册_source查询
问题排查与解决方案
你遇到的 parsing_exception: no [query] registered for [_source] 错误,本质是查询语句的语法结构完全错了,我来拆解问题并给你修正后的查询语句:
错误原因分析
你的查询语句犯了两个关键错误:
_source放错了位置:_source是用来控制查询返回哪些字段的参数,它应该和query同级,而不是嵌套在query内部。Elasticsearch会把query内部的内容当成查询类型,而_source根本不是合法的查询类型,所以报错说“没有注册_source这个查询”。match_all使用错误:match_all是匹配所有文档的查询,它不需要任何参数,你在里面写{"code":"12312"}完全不符合语法。
修正后的查询语句
根据你的需求(根据code字段查询产品),分两种常见场景给出正确的查询:
场景1:精确匹配code字段(推荐,适合ID类字段)
如果你的code字段在Elasticsearch的映射中是keyword类型(从你的数据示例看,code是类似ID的字符串,大概率是keyword),用term查询做精确匹配:
GET my_index/_search { "query": { "term": { "code": "12312" } }, // 可选:如果只需要返回特定字段,添加_source参数(和query同级) "_source": ["name", "code", "vendor_id"] }
场景2:模糊匹配code字段(适合文本类字段)
如果code是text类型(比如需要支持部分匹配),用match查询:
GET my_index/_search { "query": { "match": { "code": "12312" } } }
额外提示
你可以先通过以下命令查看code字段的映射类型,确认用哪种查询更合适:
GET my_index/_mapping/field/code
内容的提问来源于stack exchange,提问作者Karthikeyan
相关产品推荐
相关产品推荐

