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

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

相关推荐
大气层煮月亮10 小时前
RAG 检索技术 - Elasticsearch
大数据·elasticsearch·搜索引擎
Dontla13 小时前
异步知识库索引管线:与在线问答链路解耦架构介绍(离线构建,在线查询)分层索引、Elasticsearch
elasticsearch·架构
Elasticsearch13 小时前
在 Elastic 中使用 OpenTelemetry 内容包可视化 OpenTelemetry 数据
elasticsearch
Elasticsearch13 小时前
用于 IntelliJ IDEA 的新 ES|QL 插件
elasticsearch
Devin~Y14 小时前
大厂内容社区面试实录:从 Spring Boot 微服务到 AI RAG 问答(附详细解析)
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
一只游鱼16 小时前
如何让本地的敏感配置文件不上传到git仓库
git·elasticsearch
斯特凡今天也很帅1 天前
Elasticsearch数据库专栏(一)Kinaba的基础使用
elasticsearch·kibana
不爱吃糖的程序媛2 天前
鸿蒙三方库适配读懂 `thirdparty/AES/.gitignore`:哪些文件不该进 Git?
git·elasticsearch·harmonyos
A__tao2 天前
一键实现 SQL → ES Mapping 转换,支持自定义 `text` 为 `json` 转换
sql·elasticsearch·json
ShawnLiaoking2 天前
pycharm 上传更新代码
ide·elasticsearch·pycharm