在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 同义词才能生效