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

如何为Elasticsearch配置数字+v格式的模式化同义词映射?

Elasticsearch模式化同义词配置方案

可以实现你需要的模式化同义词映射,但不能用普通的静态同义词列表,得结合正则表达式+同义词过滤器来完成,以下是具体实现方案:

方案一:正则同义词直接映射

通过synonym_graph过滤器配合正则规则,直接将带v的数值token映射为对应的单复数形式:

索引配置示例

{
  "settings": {
    "analysis": {
      "filter": {
        "voltage_synonyms": {
          "type": "synonym_graph",
          "synonyms": [
            "(\\d+(?:\\.\\d+)?)v => $1 volt, $1 volts"
          ]
        }
      },
      "analyzer": {
        "voltage_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "voltage_synonyms"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "voltage_analyzer"
      }
    }
  }
}

配置说明

  • 正则表达式(\d+(?:\.\d+)?)v会匹配所有整数(如12v)或小数(如12.6v)加v的格式,$1表示引用匹配到的数字部分
  • synonym_graph过滤器支持多token同义词映射,能将单个12vtoken转换为12 volt和12 volts两组多token同义词,避免短语查询时的歧义

方案二:分两步处理(格式替换+单复数同义词)

先把带v的数值转换为"数字+volt"格式,再将volt和volts设为同义词,适合后续扩展其他单位的场景:

索引配置示例

{
  "settings": {
    "analysis": {
      "filter": {
        "replace_v_to_volt": {
          "type": "pattern_replace",
          "pattern": "(\\d+(?:\\.\\d+)?)v",
          "replacement": "$1 volt"
        },
        "volt_plural_synonyms": {
          "type": "synonym_graph",
          "synonyms": [
            "volt, volts"
          ]
        }
      },
      "analyzer": {
        "voltage_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "replace_v_to_volt",
            "volt_plural_synonyms"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "voltage_analyzer"
      }
    }
  }
}

配置说明

  1. replace_v_to_volt过滤器先将12v这类token替换为12 volt,再由standard分词器拆分为12和volt两个token
  2. volt_plural_synonyms过滤器将volt和volts设为同义词,最终实现输入12v时,同时匹配12 volt和12 volts

验证方法

创建索引后,用_analyze接口测试分词结果:

POST /your_index_name/_analyze
{
  "analyzer": "voltage_analyzer",
  "text": "12.6v"
}

返回的tokens应包含12.6、volt、volts,说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:25:10