更新时间:2026-07-13 GMT+08:00
分享

基于搜索服务定义的JSON索引配置与应用

业务背景与痛点

在工业制造与设备资产管理场景中,业务数据呈现高度动态化、非标准化特征,传统检索方案面临以下挑战:

痛点维度

具体表现

传统方案局限

结构扩展难

不同产线/型号需记录差异化工艺参数、传感器配置、维保记录等

关系型表结构变更频繁,DDL锁表影响线上

指标动态化

质检临时检测项、自定义阈值、非标工艺备注随批次/工艺路线变化

固定索引无法覆盖,需硬编码查询逻辑

统一检索诉求

业务人员期望通过单一入口,快速定位符合特定扩展条件或质量参数的设备/批次

SQL难以高效处理JSON嵌套结构的分词、过滤与范围检索

性能与弹性平衡

需在灵活存储与稳定检索之间取得平衡

JSON全文检索易导致全表扫描,过滤性能差

数据模型与JSON结构设计

应用设计态构建设备“Equipment”数据模型,核心属性如下:

表1 “Equipment”数据模型核心属性

属性英文名称

类型

说明

asset_code

文本

设备唯一资产编码。

asset_name

文本

设备中文名称。

commission_date

日期

投产日期。

clsAttrs

JSON

分类属性扩展字段,存储差异化的工艺参数、传感器配置、维保状态等。

“clsAttrs”示例结构:

{
  "maintenance": {
    "status": "running",
    "last_service": "2025-03-15"
  },
  "params": {
    "rated_power": 2.5000,
    "rated_voltage": 380,
    "temp": 85
  },
  "tags": ["critical", "high-priority"],
  "qc": {
    "last_date": "2025-07-22",
    "inspector": "zhangsan"
  },
  "fenlei": {
    "huanbao_dengji": "国VI",
    "fanghu_dengji": "IP65"
  }
}

实施前提条件

执行本实践前,请确保:

  • 登录应用运行态
  • 已明确待检索的JSON路径、数据类型及业务匹配规则(如:“maintenance.status”精确匹配,“tags”数组模糊检索)。

搜索服务定义配置

  1. 登录应用运行态
  2. 在左侧导航栏中,选择搜索服务管理 > 搜索服务定义,进入“搜索服务定义”页面。
  3. 单击“创建”,在展开的“服务定义”页签中,参照如下参数说明进行配置。

    表2 “服务定义”页签配置信息

    参数

    配置示例

    说明

    API英文名称

    EquipDynamicSearch

    接口技术标识,建议采用驼峰命名。

    API中文名称

    设备动态属性检索服务

    业务可读名称。

    API英文描述

    Search equipment by dynamic ClsAttrs

    接口功能摘要。

    API中文描述

    支持按设备扩展属性、质检动态指标等JSON字段进行检索

    清晰描述检索范围与适用场景。

    API责任人

    zhangsan

    服务维护负责人。

  4. 完成配置后,单击底部“当前页签”中的“保存”
  5. 切换至“索引定义”页签,根据业务检索需求,单击“添加索引”,配置一个JSON类型的索引。

    表3 “索引定义”页签配置信息

    配置项

    配置示例

    说明

    索引名称

    equip_cls_attrs_json

    建议带“_json”后缀便于管理。

    索引类型

    JSON

    映射实体中的“ClsAttrs”字段。

    分词方法

    普通分词或单字分词

    文本描述类用普通分词,短代码/缩写用单字分词。

    分词选项

    不涉及

    -

    作为过滤条件

    Y

    允许按JSON路径构建动态筛选面板。

    参与关键词搜索

    N(JSON类型强制置灰)

    JSON不支持全局关键词搜索,需指定路径。

    展示

    Y

    API出参返回完整JSON,供前端渲染。

    匹配方法

    精确匹配、模糊、范围、短语

    按业务场景动态选择,JSON类型均支持。

  6. 完成配置后,单击底部“当前页签”中的“保存”
  7. 切换至“服务配置”页签,选择实体,单击“添加”
  8. 选择实体名称(如“Equipment”)、属性名称(如“clsAttrs”)映射至索引“equip_cls_attrs_json”,单击底部“当前页签”中的“保存”
  9. 单击底部“全局操作”中的“发布”
  10. 在左侧导航栏中,选择数据服务管理 > 全量数据服务,进入“全量数据服务”页面。
  11. “分类”区域的“搜索服务”中,获取已发布的搜索服务及API信息。

典型检索场景与调用示例

URL格式:

POST /rdm/basic/api/searchServ/executeScript/{serviceName}/release/DSL/{pageSize}/{curPage}

实际调用时,将“serviceName”替换为“EquipDynamicSearch”,分页参数按需传入。

场景1:JSON路径精确匹配与模糊检索

业务需求:检索“maintenance.status”“running”“tags”包含“critical”的设备。

请求示例:

{
  "params": {
    "highlight": true,
    "complexCondition": [
      {
        "indexName": "equip_cls_attrs_json",
        "path": "maintenance.status",
        "matchType": "ACCURATE",
        "value": "running"
      },
      {
        "indexName": "equip_cls_attrs_json",
        "path": "tags",
        "matchType": "FUZZY",
        "value": "critical"
      }
    ]
  }
}

响应片段:

{
  "totalCount": 12,
  "items": [
    {
      "equipCode": "EQP-2025-001",
      "ClsAttrs": {
        "maintenance": { "status": "running", "lastTime": "2025-07-20" },
        "tags": ["critical", "high-priority"]
      },
      "highlight": {
        "tags": ["<em>critical</em>", "high-priority"]
      }
    }
  ]
}

多路径查询默认为AND逻辑,不支持OR逻辑嵌套。如需实现“状态为running或tags含critical”,需在业务层拆分查询或前端组合结果。

场景2:JSON路径通配查询

业务需求:检索所有层级下包含“temp”字段且值为“85”的记录。

请求示例:

{
  "params": {
    "complexCondition": [
      {
        "indexName": "equip_cls_attrs_json",
        "path": "*.temp",
        "matchType": "ACCURATE",
        "value": "85"
      }
    ]
  }
}

场景3:数值与日期范围查询

业务需求:检索额定功率在2.0-3.0之间,且最后质检日期在2025-07-20至2025-07-25之间的设备。

原始数据痛点:分类属性中的数值/日期在底层以字符串存储,范围查询默认按文本字典序(“11 < 2 < 21”),直接传入2.0会返回错误结果。

标准请求体示例:

{
  "params": {
    "complexCondition": [
      {
        "indexName": "equip_cls_attrs_json",
        "path": "params.rated_power",
        "matchType": "RANGE",
        "value": "2.0000",
        "valueEnd": "3.0000"
      },
      {
        "indexName": "equip_cls_attrs_json",
        "path": "qc.last_date.keyword",
        "matchType": "RANGE",
        "value": "1752969600000",
        "valueEnd": "1753401600000"
      }
    ]
  }
}

场景4:短语匹配查询

业务需求:要求“process.remark”字段包含完整短语“高温高压工况”,禁止分词打乱词序。

请求示例:

{
  "params": {
    "complexCondition": [
      {
        "indexName": "equip_cls_attrs_json",
        "path": "process.remark",
        "matchType": "PHRASE",
        "value": "高温高压工况"
      }
    ]
  }
}

相关文档