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

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

相关推荐
Elasticsearch8 小时前
使用 Lucene 搜索你的 Bean — 索引
elasticsearch
Elasticsearch12 小时前
最快的工作是你根本不需要做的工作:Elasticsearch 中速度提升 100 倍的排序查询
elasticsearch
Elastic 中国社区官方博客21 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
Elasticsearch1 天前
使用 Lucene 搜索你的 Bean — 搜索
elasticsearch
专业程序开发源1 天前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
vx_Biye_Design1 天前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物
Elastic 中国社区官方博客1 天前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
yukai080082 天前
【203篇系列】056 我的Agent系统
大数据·elasticsearch·搜索引擎
IT大白鼠2 天前
搜索系列 · 第 08 篇——面试收官:高频题与全景总结
elasticsearch·面试·nosql
光影少年2 天前
langchain与langgraph区别以及学习路线
elasticsearch·langchain·llm