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

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

相关推荐
OYangxf1 天前
Git Ignore
大数据·git·elasticsearch
Elastic 中国社区官方博客1 天前
jina-embeddings-v5-omni:用于文本、图像、音频和视频的 embeddings
大数据·人工智能·elasticsearch·搜索引擎·ai·音视频·jina
泓博1 天前
Openclaw-Ubuntu常用命令
大数据·elasticsearch·搜索引擎·ai
WhoAmI1 天前
Elasticsearch实战指南:构建实时全文检索系统
elasticsearch·kafka
Elastic 中国社区官方博客1 天前
Elasticsearch ES|QL “读取时模式”:你的未映射字段一直都在那里
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
Elastic 中国社区官方博客1 天前
Elasticsearch 查询日志:每个查询一行协调器级别日志,适用于 ES|QL、DSL、SQL 和 EQL
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索·可用性测试
risc1234562 天前
Elasticsearch的shrink为啥不用软链接用硬链接
elasticsearch·lucene
Elasticsearch2 天前
jina-embeddings-v5-omni:用于文本、图像、音频和视频的 embeddings
elasticsearch
森屿~~2 天前
CMA-ES:从搜索分布自适应到协方差矩阵学习
学习·elasticsearch·矩阵
剑神一笑2 天前
Linux tree 命令深度解析:从目录遍历到树形可视化的完整实现
linux·运维·elasticsearch