前一段时间做了一个按照标签内容匹配文字的功能,由于匹配的文字不是很多。扩大匹配相关性。做了一个同义词相关联的查询。顺便记录一下工作中遇到的一些问题。 文中相关的地方,都会给出相关的文章链接。 es版本为5.4.1 本文为默认安装了ik分词插件 服务器为linux服务器 elastic中关于同义词的实现链接: https://www.elastic.co/guide/cn/elasticsearch/guide/current/multi-word-synonyms.html#multi-word-synonyms
 以及*同义词的词库*:https://github.com/laotoutou/AitSimwords  首先在es中新建文件    /opt/elastic/config/    下面新建文件    synonym.txt 并输入一下内容</br> 
 族,现代人,人类,智人,民族,史前人类,人民,人,大众 
 创建es的索引 
 curl -XPUT 127.0.01:9200/test1 -d' {   "settings": {     "analysis": {       "filter": {         "my_synonym_filter": {           "type": "synonym",            "synonyms_path": "synonym.txt"         }       },       "analyzer": {         "my_synonyms": {           "tokenizer": "ik_smart",           "filter": [             "lowercase",             "my_synonym_filter"            ],           "use_smart": true         }       }     }   } }' 
 创建索引的mapping 
 curl -XPUT 127.0.01:9200/test1/_mapping/test1 -d' {       "properties" : {         "id" : {           "type" : "keyword"         },         "name" : {           "type" : "text",           "analyzer" : "my_synonyms",           "include_in_all" : true         },          "content" : {           "type" : "text",           "analyzer" : "my_synonyms",           "include_in_all" : true         }       } }' 
 并在索引中新增相关的数据 
 curl -XPUT 127.0.0.1:9200/test1/test1/120 -d '{     "name": "族" }'  curl -XPUT 127.0.0.1:9200/test1/test1/121 -d '{     "name": "现代人" }' curl -XPUT 127.0.0.1:9200/test1/test1/122 -d '{     "name": "人类" }' curl -XPUT 127.0.0.1:9200/test1/test1/123 -d '{     "name": "智人" }' curl -XPUT 127.0.0.1:9200/test1/test1/124 -d '{     "name": "民族" }' curl -XPUT 127.0.0.1:9200/test1/test1/125 -d '{     "name": "史前人类" }' curl -XPUT 127.0.0.1:9200/test1/test1/126 -d '{     "name": "人民" }' curl -XPUT 127.0.0.1:9200/test1/test1/127 -d '{     "name": "大众" }' curl -XPUT 127.0.0.1:9200/test1/test1/128 -d '{     "name": "人" }' 
 尝试进行es查询 
 curl -XPOST '127.0.0.1:9200/test1/test1/_search?pretty' -d ' {   "query": {     "match_phrase": {       "name": {         "query": "大众",         "analyzer": "my_synonyms"       }     }   } }' 
 尝试查看结果
 由于在网上找的一些资料都没有进行同义词的词库链接。 在github上找了一个同义词的词库链接。由于在测试阶段。还没有正式使用。实用性有待研究。 https://github.com/laotoutou/AitSimwords
 链接里面的内容词语之间都是tab符号需要去除,换成es中的,符号。用java写了一个小程序修改。
 public static void readFile(){         try {             FileReader fr = new FileReader("C:\\worksoft\\git\\AitSimwords\\AitSimwords.txt");             BufferedReader reader = new BufferedReader(fr);             String str = "";              FileWriter fw = new FileWriter("C:\\worksoft\\git\\AitSimwords\\AitSimwords1.txt");             BufferedWriter writer = new BufferedWriter(fw);              while ((str = reader.readLine()) != null){                 System.out.println(str);                 if (StringUtils.isEmpty(str)){                     continue;                 }                 writer.write(str.replaceAll("\\t" , "," ).substring(0 , str.length()-1));                 writer.newLine();                 writer.flush();             }             reader.close();             fr.close();              writer.close();             fw.close();          } catch (FileNotFoundException e) {             e.printStackTrace();         }catch (IOException e) {             e.printStackTrace();         }     } 
 之前的文字    列举一部分,连接中的行数有2800行左右
 鲜花	花	被子植物门	被子植物	开花植物	有花植物	花蕾	花卉	赏花	花朵	开花	 绿色	绿	 树木	树	Tree	大树	 海	大海	海域	海子	 Hong	蓝色	희열다나	红绿蓝	Yeol	Na	홍성미	Mi	Seong	Da	Hee	Hi	洪性美	喜悦Dana	Sung	Dana	蓝	 绿色植物	多年生草本	植物	多年草	植物界	宿根草	多年生	therophyte	一年生植物	多年生植物	一年生草本	 四旬	大斋节期	红色	大斋节	预苦期	红	大斋期	严斋期	四旬期	大红色	紫色	 五色旗	黄	红	黑	白色	白	蓝	 背景	 
 修改以后的问题
 鲜花,花,被子植物门,被子植物,开花植物,有花植物,花蕾,花卉,赏花,花朵,开花 绿色,绿 树木,树,Tree,大树 海,大海,海域,海子 Hong,蓝色,희열다나,红绿蓝,Yeol,Na,홍성미,Mi,Seong,Da,Hee,Hi,洪性美,喜悦Dana,Sung,Dana,蓝 绿色植物,多年生草本,植物,多年草,植物界,宿根草,多年生,therophyte,一年生植物,多年生植物,一年生草本 四旬,大斋节期,红色,大斋节,预苦期,红,大斋期,严斋期,四旬期,大红色,紫色 五色旗,黄,红,黑,白色,白,蓝 背景 
 然后把修改以后的文件上传到es的config下面的synonym.txt    文件中既可.