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

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

相关推荐
倔强的石头_36 分钟前
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战
数据库
SelectDB3 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
ApacheSeaTunnel5 小时前
当多表数据涌入,Apache SeaTunnel 如何巧妙化解主键冲突?
大数据·开源·数据集成·seatunnel·技术分享·数据同步
Elasticsearch10 小时前
使用 Elastic Agent Builder 和 Sarvam AI 构建多语言语音 agent
elasticsearch
jiayou641 天前
KingbaseES 表级与列级加密完全指南
数据库·后端
GBASE2 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
大大大大晴天3 天前
Hudi Metadata Table 与 Hive Sync (HMS)怎么选?
大数据
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
手可摘星辰7773 天前
一次线上FlinkCDC异常排查复盘
大数据·flink