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

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

第 1 步,添加 analyzer、filter、mappings

bash 复制代码
`

1.  PUT relevance-test
2.  {
3.    "settings": {
4.      "analysis": {
5.        "analyzer": {
6.          "my_analyzer": {
7.            "type": "custom",
8.            "tokenizer": "standard",
9.            "filter": [
10.              "synonyms_filter"
11.            ]
12.          }
13.        },
14.        "filter": {
15.          "synonyms_filter": {
16.            "type": "synonym",
17.            "synonyms": [
18.              "rd, road"
19.            ]
20.          }
21.        }
22.      }
23.    },
24.    "mappings": {
25.      "properties": {
26.        "address": {
27.          "type": "text"
28.        }
29.      }
30.    }
31.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

第 2 步,创建测试索引

bash 复制代码
`

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

`AI写代码

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

bash 复制代码
`

1.  POST relevance-test/_search/template?include_named_queries_score
2.  {
3.    "source": {
4.      "query": {
5.        "bool": {
6.          "should": [
7.            {
8.              "match": {
9.                "address": {
10.                  "_name": "with_synonyms",
11.                  "query": "{{search_term}}",
12.                  "analyzer": "my_analyzer"
13.                }
14.              }
15.            },
16.            {
17.              "match": {
18.                "address": {
19.                  "_name": "without_synonyms",
20.                  "query": "{{search_term}}"
21.                }
22.              }
23.            }
24.          ]
25.        }
26.      }
27.    },
28.    "params": {
29.      "search_term": "123 supercool road"
30.    }
31.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

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

bash 复制代码
`

1.  POST relevance-test/_search/template?include_named_queries_score
2.  {
3.    "source": {
4.      "query": {
5.        "bool": {
6.          "should": [
7.            {
8.              "match": {
9.                "address": {
10.                  "_name": "with_synonyms",
11.                  "query": "{{search_term}}",
12.                  "analyzer": "my_analyzer"
13.                }
14.              }
15.            },
16.            {
17.              "match": {
18.                "address": {
19.                  "_name": "without_synonyms",
20.                  "query": "{{search_term}}"
21.                }
22.              }
23.            }
24.          ]
25.        }
26.      }
27.    },
28.    "params": {
29.      "search_term": "123 supercool rd"
30.    }
31.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

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

相关推荐
普通网友7 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
虫小宝7 小时前
优惠券省钱APP查询性能优化:Elasticsearch与Canal实现的多维度商品搜索毫秒级响应方案
elasticsearch·性能优化·jenkins
leoZ23120 小时前
10-Git 仓库蒸馏术:从代码仓库到 OpenClaw 虚拟人-蒸馏工具链
大数据·git·深度学习·神经网络·目标检测·elasticsearch·lstm
艾伦_耶格宇20 小时前
【DOCKER容器实战】-3 ElasticSearch + Kibana
elasticsearch·docker·jenkins
Sayai2 天前
Elasticsearch 日志索引设计:按小时切分 + 小时内 Rollover 兜底(ILM 实战,附完整脚本)
大数据·elasticsearch·搜索引擎
Elasticsearch2 天前
生产环境向量搜索的一个设置:vectordb_document 模式如何自动调优 Elasticsearch
elasticsearch
【赫兹威客】浩哥2 天前
基于SpringBoot+Vue3的舆情文本分析系统|Elasticsearch检索+情感分析+话题热度追踪 毕设项目
spring boot·elasticsearch·课程设计
玉&心2 天前
在grafana中加入elasticsearch的日志dashboard
elasticsearch·grafana
Elasticsearch2 天前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
elasticsearch
Elastic 中国社区官方博客2 天前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索