同义词
简介
在搜索场景中,同义词用来处理不同的查询词,有可能是想表达相同的搜索目标。
例如:查询“北京大学”和“北大”时,其实时想搜索同一个内容。
在ES内置的分词过滤器中,有两个同义词分词过滤器(synonym 和 synonym_graph)
官网:
synonym: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-synonym-tokenfilter.html
synonym_graph: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/analysis-synonym-graph-tokenfilter.html
synonym_graph 相对于 synonym 对于多词同义词有更精确的效果
官方建议,在索引时使用 synonym ,在 查询时 使用 synonym_graph
分析使用
可以借助同义词过滤器实现 同义词分析器
指定同义词内容,有两种方式
- 直接通过synonyms 指定,同义词用 , 分割
# synonym
POST _analyze
{
"tokenizer": "ik_smart",
"filter": {
"type": "synonym",
"synonyms": [
"北京大学, 北大"
]
},
"text": "北京大学"
}
- 通过文件方式指定 同义词
- 在 es/config 目录下 创建文件 analysis/synonym.txt
- 在 synonym.txt 中编辑同义词内容
# 通过文件方式指定同义词
POST _analyze
{
"tokenizer": "ik_smart",
"filter": {
"type": "synonym",
"synonyms_path": "analysis/synonym.txt"
},
"text": "北京大学"