You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elasticsearch查询或Reactive Search组件中映射字段返回值?

实现字段值映射的两种方案

一、在Elasticsearch查询中直接实现

可以通过**运行时字段(Runtime Fields)或者脚本字段(Script Fields)**实现值的映射,无需修改原始数据:

1. 使用运行时字段(推荐)

在查询时定义临时字段,直接返回映射后的值:

{
  "runtime_mappings": {
    "size_result": {
      "type": "keyword",
      "script": """
        def value = doc['your_field_name'].value;
        if (value == 'Small' || value == 'Medium') {
          emit('Yes');
        } else if (value == 'Average' || value == 'Big') {
          emit('No');
        }
      """
    }
  },
  "_source": ["your_field_name", "size_result"], // 指定返回原始字段和映射后的字段
  "query": {
    "match_all": {} // 替换为你的实际查询条件
  }
}

2. 使用脚本字段

若只需额外返回映射值,可使用script_fields:

{
  "_source": ["your_field_name"],
  "script_fields": {
    "size_result": {
      "script": {
        "source": """
          def val = doc['your_field_name'].value;
          return (val == 'Small' || val == 'Medium') ? 'Yes' : 'No';
        """
      }
    }
  },
  "query": {
    "match_all": {}
  }
}

二、通过Reactive Search的列表组件实现

Reactive Search的List组件可通过数据转换或自定义渲染实现映射:

1. 使用transform属性提前转换数据

在组件配置中用transform函数替换原始字段值:

<List
  componentId="sizeFilter"
  dataField="your_field_name"
  title="Size Category"
  transform={item => {
    const mapping = {
      'Small': 'Yes',
      'Medium': 'Yes',
      'Average': 'No',
      'Big': 'No'
    };
    return {
      ...item,
      label: mapping[item.label] || item.label
    };
  }}
/>

2. 自定义renderItem渲染

通过renderItem实现更灵活的渲染逻辑:

<List
  componentId="sizeFilter"
  dataField="your_field_name"
  title="Size Category"
  renderItem={(item) => {
    const displayText = (item.label === 'Small' || item.label === 'Medium') ? 'Yes' : 'No';
    return <div>{displayText}</div>;
  }}
/>

内容的提问来源于stack exchange,提问作者Guillaume Theret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:50:31