elasticsearch查询中的特殊字符影响分析

大家先看一个执行的dsl 查询sql,大致的意思是排除某些分类下的商品

java 复制代码
GET /productinfos/_search
{
  "from": 0,
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "minprice"
          }
        },
        {
          "bool": {
            "should": [
             
              {
                "terms": {
                  "productClass": [
                    "-114-",
                    "-114-113-",
                    "-2-",
                    "-5-58-",
                    "-61-69-",
                    "-7-",
                    "-7-82-"
                  ]
                }
              }
            ]
          }
        }
      ],
      "must_not": [
        {
          "terms": {
            "spuId": [
              "85",
              "7",
              "10",
              "11"
            ]
          }
        }
      ]
    }
  },
  "size": 10,
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

当我在kibana中执行的时候,可以很快速的查询出结果,但是当我用java api 执行的时候,完全一样的dsl,但是是查询不到结果的。

索引中的 productClass 是keyword类型,我第一反应就是匹配的值不对,第二反应就是特殊字符没有转义,当我用// * 各种转义符处理的时候,依然是这种情况,我就开始深度思考了。

我观察了数据的形式 -114-113-,突然想到了可能是-的问题,果不其然,-在elasticsearch中还有一层表示,就是 must_not,也就是 相当于去匹配了 114-113- ,这样肯定是匹配不到的。

但是为什么在kibana 中是可以的呢?原来kibana是会自动处理的。

如果去全量更新数据的值,这个工作量和复杂度实在是不可取,到底能不能用api去匹配,当然可以!但是需要注意两点

1 字段必须有个keyword类型

2 还要避开 - 这个特殊字符的 特殊含义

索引在api中不能直接用字段productClass字段,需要指定为productClass.keyword,强制按照string类型去匹配

结果一切正常!!

所以我们以后存储数据的时候,一定要注意字符的使用!不然大坑实在是太多。

相关推荐
会飞的老朱9 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
AI_567813 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
CRzkHbaXTmHw13 小时前
探索Flyback反激式开关电源的Matlab Simulink仿真之旅
大数据
七夜zippoe14 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥14 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿14 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
忆~遂愿15 小时前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
米羊12115 小时前
已有安全措施确认(上)
大数据·网络
人道领域16 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
qq_124987075317 小时前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计