在config/analysis目录下创建一个文件注意需要UTF-8格式,否则会解析失败:malformed_input_exception
每行一组织同义词以逗号分隔(半角英文)
京城,北京,北平
个税,个人所得税,所得税
水利基金,水利建设费,水利建设维护费,水利建设,河道基金
创建索引 注意下面的命令要删除注释才能运行
PUT us_law
{
"settings": {
"analysis": {
"filter": {
"us_synonym_filter": { #自定义过滤器名称
"type": "synonym_graph", #过滤器类型:同义词
"synonyms_path": "analysis/us_synonym.txt" #引用上面创建的文件
}
},
"analyzer": {
"us_max_word": { #自定义分词器名称
"tokenizer": "ik_max_word", #基于内置的ik_max_word
"filter": [
"us_synonym_filter" #引用上面创建的过滤器
]
},
"us_smart": { #再定义另一个
"tokenizer": "ik_smart",
"filter": [
"lowercase", #可以多个过滤器,lowercase是内置的
"us_synonym_filter"
]
}
}
}
},
"mappings": {
"properties": {
"title":{
"type": "text",
"analyzer": "us_max_word", #保存内容用us_max_word分词器
"search_analyzer": "us_smart" #查询条件用us_smart分词器
}
}
}
}
插入一条数据
POST us_law/_doc/1
{
"title":"北京是祖国的首都,车辆购置税"
}
搜索北京肯定没问题
POST /us_law/_search
{
"query":{
"match":{
"title":"北京"
}
}
}
搜索京城如果也能搜索出来说明同义词生效了
POST /us_law/_search
{
"query":{
"match":{
"title":"京城"
}
}
}
车购税应该搜不出来
POST /us_law/_search
{
"query":{
"match":{
"title":"车购税"
}
}
}
在文件中再添加一行
车辆购置税,车购税
再搜索车购税还是没结果
再重新PUT一次
POST us_law/_doc/1
{
"title":"北京是祖国的首都,车辆购置税"
}
再搜索车购税,还是没结果
启es 再PUT一次,再搜索车购税有结果了
说明需要重启es 同义词才能生效