前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES搜索提示unknown field [disable_coord]问题记录

ES搜索提示unknown field [disable_coord]问题记录

作者头像
SmileNicky
发布2022-12-08 14:52:38
1.2K0
发布2022-12-08 14:52:38
举报
文章被收录于专栏:Nicky's blog

项目场景:

软件环境:

  • ElasticSearch 7.17.3
  • org.elasticsearch.client 7.9.0

问题描述

提示:这里描述项目中遇到的问题: 最近运维迁移了一个环境,重新搭建了ElasticSearch、logstash、kibana,原本已经调好的接口都使用BoolQueryBuilder 这些API来查询的,如下所示:

代码语言:javascript
复制
BoolQueryBuilder builder = QueryBuilders.boolQuery();
builder.filter(QueryBuilders.termQuery("is_deleted", 0));
builder.filter(QueryBuilders.termQuery("status", 100));
builder.filter(QueryBuilders.termQuery("type", "a_table"));

在新的环境,调用都出现了 unknown field [disable_coord]的错误,是ElasticSearch版本问题?不支持[disable_coord]这个属性?不过版本都是7.X

代码语言:javascript
复制
{
    "error":{
        "root_cause":[
            {
                "type":"x_content_parse_exception",
                "reason":"[1:2235] [bool] unknown field [disable_coord]"
            }
        ],
        "type":"x_content_parse_exception",
        "reason":"[1:2251] [bool] failed to parse field [should]",
        "caused_by":{
            "type":"x_content_parse_exception",
            "reason":"[1:2235] [bool] unknown field [disable_coord]"
        }
    },
    "status":400
}

原因分析:

提示:这里填写问题的分析:

这个disable_coord属性,是BoolQueryBuilder自动加上去的

在这里插入图片描述
在这里插入图片描述

搜了一下这个属性的作用:

disable_coord: 弃用和禁用一个文档中所包含所有查询关键词的得分计算。默认是false

难道是因为ES客户端API的这个属性,对应的ElasticSearch不支持,去官网和网上搜索资料也没找到对应的,所以就先记录一下问题


解决方案:

提示:这里填写该问题的具体解决方案:

因为如果换ElasticSearch版本改动比较大,所以将传入的参数转为JSON,然后JSON字符串remove这个disable_coord属性,有两张表的查询也会在has_child里加上这个属性,也需要根据情况弄一下,下面代码仅供参考

代码语言:javascript
复制
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.highlighter(new HighlightBuilder().field("t_name"));
sourceBuilder.query(builder);
sourceBuilder.from((pageModel.getPageIndex() - 1) * pageModel.getPageRowNum());
sourceBuilder.size(pageModel.getPageRowNum());
agg.forEach(sourceBuilder::aggregation);

String str = sourceBuilder.toString();
JSONObject jsonObject = (JSONObject) JSONUtil.parseObj(str);
jsonObject.getJSONObject("query").getJSONObject("bool").remove("disable_coord");

JSONArray filterArray = jsonObject.getJSONObject("query").getJSONObject("bool").getJSONArray("filter");
JSONObject has_child1 = filterArray.getJSONObject(filterArray.size() - 1).getJSONObject("has_child");
if (has_child1 != null)
    has_child1.getJSONObject("query").getJSONObject("bool").remove("disable_coord");
JSONObject has_child2 = filterArray.getJSONObject(filterArray.size() - 2).getJSONObject("has_child");
if (has_child2 != null)
    has_child2.getJSONObject("query").getJSONObject("bool").remove("disable_coord");

初步猜想是因为ES版本和客户端API的不兼容,但是因为改版本影响比较大,也没找到根本原因,所以本博客只好先记录问题,本博客只能参考,有找到具体原因的读者,可以评论回复

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目场景:
  • 问题描述
  • 原因分析:
  • 解决方案:
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档