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

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

相关推荐
千里念行客2403 分钟前
南都电源在甘肃玉门的200MW/800MWh独立共享储能电站建成
大数据·科技·能源
赤龙ERP10 分钟前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern
lusklusklusk17 分钟前
SQL Server补丁版本号为什么“日期新反而版本低”?——GDR、CU、CU+GDR 版本号规则与升级路径详解
数据库
key_3_feng34 分钟前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
TangGeeA35 分钟前
数据库、SQL 与 DB AI
数据库·人工智能·sql
IvorySQL35 分钟前
开源数据库进校园| 11 月 3 日,IvorySQL 校园行走进浙大宁波校区:从 PostgreSQL 扩展生态到 AI 实战
数据库·postgresql·开源
程序员梅雨39 分钟前
【从零开始学习数据仓库 | 第二篇】: 拉链表 & 数仓分层
大数据·数据仓库·学习
福建佰胜张工1 小时前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化
`Levie1 小时前
MySQL-数据库服务日志管理与数据闪回
数据库·mysql
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习