
# 基于搜索服务定义的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"
  }
}
```
#### 实施前提条件
执行本实践前，请确保：
- 已[登录应用运行态](https://support.huaweicloud.com/consog-idme/idme_consog_0023.html)。
- 已明确待检索的JSON路径、数据类型及业务匹配规则（如："maintenance.status"精确匹配，"tags"数组模糊检索）。
 
#### 搜索服务定义配置
1. [登录应用运行态](https://support.huaweicloud.com/consog-idme/idme_consog_0023.html)。
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"]
      }
    }
  ]
}
```
![](https://support.huaweicloud.com/usermanual-idme/public_sys-resources/caution_3.0-zh-cn.png)
多路径查询默认为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": "高温高压工况"
      }
    ]
  }
}
```
