需要知道某个同义词是否实际匹配了你的 Elasticsearch 查询吗?

2026年3月26日   |   by mebius

有时,我们想知道某个同义词是否真正匹配了我们的 Elastic 查询。下面我们使用named queries + include_named_queries_score 来进行展示。使用和不使用 synonym analyzer 运行相同的 match,返回的分数会告诉你该同义词是否对相关性产生了贡献。

第 1 步,添加 analyzer、filter、mappings

PUT relevance-test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
   tgcode       "tokenizer": "standard",
          "filter": [
            "synonyms_filter"
          ]
        }
      },
      "filtetgcoder": {
        "synonyms_filter": {
          "type": "synonym",
          "synonyms": [
            "rd, road"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "address": {
        "type": "text"
      }
    }
  }
}

第 2 步,创建测试索引

PUT relevance-test/_bulk 
{"index": {"_id": 1}}
{"address": "123 supercool road"}

第 3 步,测试正常词语搜索

POST relevance-test/_search/template?include_named_queries_score
{
  "source": {
    "query": {
      "bool": {
        "should": [
          {
            "match": {
              "address": {
                "_name": "with_synonyms",
                "query": "{{search_term}}",
                "analyzer": "my_analyzer"
              }
            }
          },
          {
            "match": {
              "address": {
                "_name": "without_synonyms",
                "query": "{{search_term}}"
              }
            }
          }
        ]
      }
    }
  },
  "params": {
    "search_term": "123 supercool road"
  }
}

%title插图%num

在我们的测试中,我们使用 “123 supercool road” 来进行测试。我们并没有使用到简写的 rd 同义词来进行测试。上面显示使用同义词和没有使用同义词的分数都是一样的。

第 4 步,使用同义词来进行测试

POST relevance-test/_search/template?include_named_queries_score
{
  "source": {
    "query": {
      "bool": {
        "should": [
          {
            "match": {
              "address": {
                "_name": "with_synonyms",
                "query": "{{search_term}}",
                "analyzer": "my_analyzer"
              }
            }
          },
          {
            "match": {
              "address": {
                "_name": "tgcodewithout_synonyms",
                "query": "{{search_term}}"
              }
            }
          }
        ]
      }
    }
  },
  "params": {
    "search_term": "123 supercool rd"
  }
}

%title插图%num

在上面,我们使用 “123 supercool rd” 来进行测试。很显然,最终的结果显示使用的是使用同义词贡献的分数更大。

%title插图%num

希望,这篇文章能对你检测同义词是否工作有所帮助。

文章来源于互联网:需要知道某个同义词是否实际匹配了你的 Elasticsearch 查询吗?

相关推荐: 如何防御你的 RAG 系统免受上下文投毒攻击

作者:来自 ElasticToms Mura 上下文工程技术如何防止 LLM 响应中的上下文投毒。 Agent Builder 现在已经正式发布。你可以通过 Elastic Cloud Trial 开始使用,并在这里查看 Agent Builder 的文档。 …

Tags: