需要知道某个同义词是否实际匹配了你的 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" 来进行测试。很显然,最终的结果显示使用的是使用同义词贡献的分数更大。

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

相关推荐
Rider_bai9 分钟前
长春到天津物流专线,长春到天津物流公司,如何找到靠谱公司的联系方式?
大数据·网络·物联网·敏捷流程·交通物流
sevenll0714 分钟前
DocKit agentic MongoDB GUI 客户端 - 用自然语言和你的数据对话
数据库·mongodb·nosql·agent·桌面客户端
团象科技25 分钟前
从一线实操案例拆解不同出海团队落地海外VPS运维独立站的路径细节
大数据·数据库·人工智能
yinmaisoft26 分钟前
JNPF 三大主流行业解决方案,按需定制
大数据·低代码·开发工具
小马爱打代码40 分钟前
框架 - 组件 - 中间件:生产级参数配置指引
数据库·中间件
王牌狮AIen1 小时前
AI营销智能体实战:OPC如何重构自主获客闭环?
大数据·人工智能·重构·数据挖掘·geo·ai营销
asdfg12589631 小时前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc
点灯小铭1 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
小陈phd1 小时前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
霸道流氓气质1 小时前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云