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

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

第 1 步,添加 analyzer、filter、mappings

复制代码
PUT relevance-test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "synonyms_filter"
          ]
        }
      },
      "filter": {
        "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"
  }
}

在我们的测试中,我们使用 "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": "without_synonyms",
                "query": "{{search_term}}"
              }
            }
          }
        ]
      }
    }
  },
  "params": {
    "search_term": "123 supercool rd"
  }
}

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

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

相关推荐
IvorySQL9 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔9 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用10 小时前
Spring对IoC的实现
数据库·spring
问商十三载10 小时前
AI引擎生成式优化实践:刑事辩护律师团队IP构建
大数据·人工智能
会议咨询11 小时前
2026年大数据、信息系统与智能通信国际会议(BDIIC 2026)
大数据·信息系统·智能通信
Raas10011 小时前
MAI Gateway(魔芋企业级AI网关)能力解析:AI网关能做故障转移吗?AI网关核心功能详解
大数据·人工智能·网关·ai·gateway·mai gateway
hz5678912 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC12 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday12 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
IT研究所12 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微