前一段時間作了一個按照標籤內容匹配文字的功能,因爲匹配的文字不是不少。擴大匹配相關性。作了一個同義詞相關聯的查詢。順便記錄一下工做中遇到的一些問題。</br> 文中相關的地方,都會給出相關的文章連接。</br> es版本爲5.4.1</br> 本文爲默認安裝了ik分詞插件</br> 服務器爲linux服務器</br> elastic中關於同義詞的實現連接: https://www.elastic.co/guide/cn/elasticsearch/guide/current/multi-word-synonyms.html#multi-word-synonyms</br>html
以及*同義詞的詞庫*: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" } } } }'
嘗試查看結果java
因爲在網上找的一些資料都沒有進行同義詞的詞庫連接。</br> 在github上找了一個同義詞的詞庫連接。因爲在測試階段。尚未正式使用。實用性有待研究。 https://github.com/laotoutou/AitSimwords
連接裏面的內容詞語之間都是tab符號須要去除,換成es中的,符號。用java寫了一個小程序修改。linux
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行左右git
鮮花 花 被子植物門 被子植物 開花植物 有花植物 花蕾 花卉 賞花 花朵 開花 綠色 綠 樹木 樹 Tree 大樹 海 大海 海域 海子 Hong 藍色 희열다나 紅綠藍 Yeol Na 홍성미 Mi Seong Da Hee Hi 洪性美 喜悅Dana Sung Dana 藍 綠色植物 多年生草本 植物 多年草 植物界 宿根草 多年生 therophyte 一年生植物 多年生植物 一年生草本 四旬 大齋節期 紅色 大齋節 預苦期 紅 大齋期 嚴齋期 四旬期 大紅色 紫色 五色旗 黃 紅 黑 白色 白 藍 背景
修改之後的問題github
鮮花,花,被子植物門,被子植物,開花植物,有花植物,花蕾,花卉,賞花,花朵,開花 綠色,綠 樹木,樹,Tree,大樹 海,大海,海域,海子 Hong,藍色,희열다나,紅綠藍,Yeol,Na,홍성미,Mi,Seong,Da,Hee,Hi,洪性美,喜悅Dana,Sung,Dana,藍 綠色植物,多年生草本,植物,多年草,植物界,宿根草,多年生,therophyte,一年生植物,多年生植物,一年生草本 四旬,大齋節期,紅色,大齋節,預苦期,紅,大齋期,嚴齋期,四旬期,大紅色,紫色 五色旗,黃,紅,黑,白色,白,藍 背景
而後把修改之後的文件上傳到es的config下面的synonym.txt 文件中既可.小程序