Elasticsearch安裝ik分詞
阿新 • • 發佈:2019-01-05
elasticsearch是自帶中文分詞的, 但是基本上是每個單字的分, 效果不好。
1. 安裝ik外掛
下載之後, 放到plugin目錄下, 解壓即可使用了。
2. 建立index的時候, 給出mapping, 在mapping中, 指定欄位所使用的analyzer為ik
e.g. curl -XPOST http://localhost:9200/index/fulltext/_mapping -d' { "fulltext": { "_all": { "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "term_vector": "no", "store": "false" }, "properties": { "content": { "type": "string", "store": "no", "term_vector": "with_positions_offsets", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "include_in_all": "true", "boost": 8 } } } }'
3. 對於分詞的效果, 可使用 _analyze 來檢視
e.g. GET localhost:9200/_analyze -d '
{
"analyzer":"ik_max_word",
"text" : "助手P5 5.14.9003"
}’
4. 對於同一個欄位, 使用不同分詞器的情況, 可參考http://keenwon.com/1404.html 給出的例子, 對一個field建立多個子field, 對該field及多個子fields使用不同的analyzer。
e.g. 下面黃色標出的部分, 即是title這個field的子fileds : cn 和 en
對title本身使用的是標準分詞器, 對title.cn使用的是ik分詞器,對title.cn使用的是自帶的英文分詞器。
在搜尋的時候, 同時匹配該欄位及其子欄位就可以了。PUT http://192.168.159.159:9200/index1 { "settings": { "refresh_interval": "5s", "number_of_shards" : 1, // 一個主節點 "number_of_replicas" : 0 // 0個副本,後面可以加 }, "mappings": { "_default_":{ "_all": { "enabled": false } // 關閉_all欄位,因為我們只搜尋title欄位 }, "resource": { "dynamic": false, // 關閉“動態修改索引” "properties": { "title": { "type": "string", "index": "analyzed", "fields": { "cn": { "type": "string", "analyzer": "ik" }, "en": { "type": "string", "analyzer": "english" } } } } } } }
POST http://192.168.159.159:9200/index1/resource/_search
{
"query": {
"multi_match": {
"type": "most_fields",
"query": "最新",
"fields": [ "title", "title.cn", "title.en" ]
}
}
}