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

如何为单个待索引文档设置专属同义词及同位置双令牌?

索引阶段生成文档专属同义词令牌的实现方案

可行方案概述

完全可以通过自定义分析器搭配脚本化令牌过滤器,在索引时基于文档自身字段的动态条件,在同一位置生成两个(或多个)令牌,实现文档专属同义词的索引效果。

具体实现步骤

1. 创建包含脚本过滤器的自定义分析器

利用Elasticsearch的script_token_filter,在索引流程中读取文档的指定字段值,动态生成与原令牌位置、偏移量完全一致的同义词令牌。

示例配置:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "doc_specific_synonym_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "doc_specific_synonym_filter"
          ]
        }
      },
      "filter": {
        "doc_specific_synonym_filter": {
          "type": "script",
          "script": {
            "source": """
              List<Token> outputTokens = new ArrayList<>();
              for (Token token : tokens) {
                // 保留原始令牌
                outputTokens.add(token);
                // 从当前文档的doc_synonym字段获取专属同义词
                String synonym = doc['doc_synonym'].value;
                if (synonym != null && !synonym.isBlank()) {
                  // 创建与原令牌位置、偏移量一致的同义词令牌
                  Token synToken = new Token(synonym, token.startOffset, token.endOffset, token.position, token.positionLength);
                  outputTokens.add(synToken);
                }
              }
              return outputTokens;
            """
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "doc_specific_synonym_analyzer"
      },
      "doc_synonym": {
        "type": "keyword"
      }
    }
  }
}

2. 验证效果

索引测试文档:

PUT /my_index/_doc/1
{
  "content": "documentSpecificTokenA",
  "doc_synonym": "documentSpecificTokenB"
}

调用分析接口验证结果:

POST /my_index/_analyze
{
  "analyzer": "doc_specific_synonym_analyzer",
  "text": "documentSpecificTokenA",
  "field": "content"
}

返回的令牌结构将与你给出的示例一致:

0 - documentspecifictokena - 1
0 - documentspecifictokenb - 1

关键注意事项

  • 确保Elasticsearch配置中script.allowed_contexts包含indexing,允许脚本在索引阶段访问文档字段。
  • 若需要多同义词映射,可将doc_synonym字段设为数组类型,在脚本中循环遍历数组生成多个令牌。
  • 该方案仅作用于索引阶段,搜索阶段可独立配置分析器,避免影响搜索逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:14