1. 程式人生 > >Elasticsearch安裝ik分詞

Elasticsearch安裝ik分詞

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" ]
    }
  }
}