安裝elasticsearch及中文IK和近義詞配置


安裝elasticsearch及中文IK和近義詞配置

安裝java環境

java環境是elasticsearch安裝必須的

yum install java-1.8.0-openjdk

安裝elasticsearch

其實es的安裝非常簡單了

https://www.elastic.co/downloads/elasticsearch
cd /tmp
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gz
tar -xf elasticsearch-1.7.1.tar.gz
mv /tmp/elasticsearch-1.7.1 /usr/local/
ln -s /usr/local/elasticsearch-1.7.1 /usr/local/elasticsearch

安裝head插件

head插件讓我們能更簡單管理elasticsearch

cd /usr/local/elasticsearch
./bin/plugin --install mobz/elasticsearch-head

訪問 http://192.168.33.10:9200/_plugin/head/ 可以訪問

安裝IK插件

去rtf項目中獲取對應插件,建議別去自己找plugin下,medcl大已經為我們准備好了一切

cd /tmp
wget https://github.com/medcl/elasticsearch-rtf/archive/master.zip
unzip elasticsearch-rtf-master.zip
cd elasticsearch-rtf-master
cp -rf config/ik /usr/local/elasticsearch/config/
cp -rf plugins/analysis-ik /usr/local/elasticsearch/plugins/

vim /usr/local/elasticsearch/config/elasticsearch.yml
增加:
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

配置近義詞

近義詞組件已經是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里面有文字兩個字
  • “中文”“漢字”“漢語”三個詞出現是由於近義詞字典中我們設置了這三個為同等級的近義詞


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM