1. 程式人生 > >Elasticsearch 配置同義詞

Elasticsearch 配置同義詞

一起 索引 pan provide path 轉化 eabi token pos

配置近義詞
近義詞組件已經是elasticsearch自帶的了,所以不需要額外安裝插件,但是想要讓近義詞和IK一起使用,就需要配置自己的分析器了。

首先創建近義詞文檔

在config目錄下

mkdir analysis
vim analysis/synonym.txt

編輯:

i-pod, i pod, i pad => ipod,
sea biscuit, sea biscit => seabiscuit,
中文,漢語,漢字
這裏可以看到近義詞的寫法有兩種:

a,b => c
a,b,c
第一種在分詞的時候,a,b都會解析成為c,然後把c存入索引中
第二種在分詞的時候,有a的地方,都會解析成a,b,c,把a,b,c存入索引中
第一種方法相比之下有個主詞,比較省索引。

配置elasticsearch.yml中的自定義索引,和前面的ik結合,可以這麽設置:

index:
  analysis:
    analyzer:
      ik:
          alias: [ik_analyzer]
          type: org.elasticsearch.index.analysis.IkAnalyzerProvider
      ik_max_word:
          type: ik
          use_smart: 
false ik_smart: type: ik use_smart: true my_synonyms: tokenizer: standard ik_syno: type: custom tokenizer: ik filter: [my_synonym_filter] ik_syno_smart: type: custom tokenizer: ik filter: [my_synonym_filter] use_smart:
true filter: my_synonym_filter: type: synonym synonyms_path: analysis/synonym.txt 上面的配置文件創建了一個filter: my_synonym_filter, 然後創建了兩個自定義analyzer: ik_syno和ik_syno_smart 啟動elasticsearch: bin/elasticsearch 案例測試 按照上面的配置,我們使用一個具體的句子進行測試: 120.55.72.158:9700/elasticsearchtest2 {
"index" : { "analysis" : { "analyzer" : { "ik_syno" : { "tokenizer" : "ik", "filter" : ["my_synonym_filter"] } } } } } curl -XPOST "192.168.33.10:9200/elasticsearchtest/_analyze?analyzer=ik_syno" -d we are eng man i pad 漢語文字 返回json結構: { "tokens": [ { "token": "we", "start_offset": 0, "end_offset": 2, "type": "ENGLISH", "position": 1 }, { "token": "eng", "start_offset": 7, "end_offset": 10, "type": "ENGLISH", "position": 2 }, { "token": "man", "start_offset": 11, "end_offset": 14, "type": "ENGLISH", "position": 3 }, { "token": "ipod", "start_offset": 15, "end_offset": 20, "type": "SYNONYM", "position": 4 }, { "token": "中文", "start_offset": 21, "end_offset": 23, "type": "SYNONYM", "position": 5 }, { "token": "漢語", "start_offset": 21, "end_offset": 23, "type": "SYNONYM", "position": 5 }, { "token": "漢字", "start_offset": 21, "end_offset": 23, "type": "SYNONYM", "position": 5 }, { "token": "文字", "start_offset": 23, "end_offset": 25, "type": "CN_WORD", "position": 6 } ] } 這裏就可以看到我們之前配置的東西都成功了: are字被過濾,是由於are字是stop_words i pad這個詞語被轉化為了ipod是由於近義詞字典中我們設置了 i pad=>ipod “文字”兩個中文字是被分成一個中文詞切割,是因為ik的默認main.dic裏面有文字兩個字 “中文”“漢字”“漢語”三個詞出現是由於近義詞字典中我們設置了這三個為同等級的近義詞

參考文獻:

http://www.cnblogs.com/yjf512/p/4789239.html

Elasticsearch 配置同義詞