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

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

相关推荐
Elasticsearch14 分钟前
Elastic Cloud 无服务器服务审计日志:将审计记录发送到可观测性或安全解决方案
elasticsearch
zwjapple13 小时前
skill总结
大数据·elasticsearch·搜索引擎
阿里云大数据AI技术18 小时前
云栖实录|从代码上下文到千亿级文档:Qoder × 阿里云 Elasticsearch 落地生产级Agent向量检索
人工智能·elasticsearch
Elastic 中国社区官方博客21 小时前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
大数据·运维·服务器·人工智能·elasticsearch·信息可视化·全文检索
Elastic 中国社区官方博客2 天前
Elastic 重大事件功能如何将 100 条日志样本转化为检测规则
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎
Elasticsearch2 天前
使用 OpenTelemetry 在 Elastic 中实现 Claude 平台的人工智能 agent 可观测性
elasticsearch
keyipatience3 天前
Git学习(2)撤销与分支操作全指南
大数据·elasticsearch·搜索引擎
加洛斯3 天前
万字推演Elasticsearch修炼方法,从炼气到元婴
后端·elasticsearch·面试
说实话起个名字真难啊3 天前
Git常用小问题笔记
笔记·git·elasticsearch
Elasticsearch3 天前
三个区域、三个 Kibana、一个视图:跨集群搜索登陆 Elastic 合成监测
elasticsearch