ElasticSearch同义词操作步骤
环境:
elasticsearch 6.4.3(已提前安装好)
kibana 6.4.3(已提前安装好)
ik分词器 6.4.3
注:三者版本要保持一致
1.安装插件ik中文分词器
原因:
如果不安装ik中文分词器,那么在进行同义词匹配分词中,它不知道该怎么断词,会将一句话中的每个中文词单独的分出来,不会以我们常用的组词规则进行划分。
安装分词器后会根据中文习惯划分词组。
安装方法:
使用elasticsearch-plugin进行安装(从v5.5.1版本支持)
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip
注意:替换6.4.3为自己的elasticsearch版本
2.实验数据准备
在elasticsearch文件夹下的config中新建文件夹analysis,再在analysis文件夹下创建同义词替换数据文本文件synonyms.txt。
txt中的内容为(同义词内容根据自己的想法定义):
西红柿,番茄 =>西红柿,番茄
社保,公积金 =>社保,公积金
british, english
queen, monarch
具体同义词定义和格式见官方要求Elasticsearch同义词和分析链
3.创建分词索引
kibana中创建的方法:
PUT /syno
{
"settings": {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms_path" : "analysis/synonyms.txt"
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "ik_smart",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
}
}
}
}
"synonyms_path"为自己在elasticsearch中的config文件下所建的相关同义词替换定义的文本文件路径。
4.实验结果测试
kibana中测试内容输入:
GET /syno/_analyze
{
"text":"你的社保要给多少钱?",
"analyzer": "my_synonyms"
}
实验结果显示:
{
"tokens": [
{
"token": "你",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "的",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "社保",
"start_offset": 2,
"end_offset": 4,
"type": "SYNONYM",
"position": 2
},
{
"token": "公积金",
"start_offset": 2,
"end_offset": 4,
"type": "SYNONYM",
"position": 2
},
{
"token": "要给",
"start_offset": 4,
"end_offset": 6,
"type": "CN_WORD",
"position": 3
},
{
"token": "多少钱",
"start_offset": 6,
"end_offset": 9,
"type": "CN_WORD",
"position": 4
}
]
}