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