首先,安装中文分词插件。这里使用的是 ik,也可以考虑其他插件(比如 smartcn)。

    1. $ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip

    上面代码安装的是5.5.1版的插件,与 Elastic 5.5.1 配合使用。 接着,重新启动 Elastic,就会自动加载这个新安装的插件。 然后,新建一个 Index,指定需要分词的字段。这一步根据数据结构而异,下面的命令只针对本文。基本上,凡是需要搜索的中文字段,都要单独设置一下。

    1. $ curl -X PUT 'localhost:9200/accounts' -d '
    2. {
    3. "mappings": {
    4. "person": {
    5. "properties": {
    6. "user": {
    7. "type": "text",
    8. "analyzer": "ik_max_word",
    9. "search_analyzer": "ik_max_word"
    10. },
    11. "title": {
    12. "type": "text",
    13. "analyzer": "ik_max_word",
    14. "search_analyzer": "ik_max_word"
    15. },
    16. "desc": {
    17. "type": "text",
    18. "analyzer": "ik_max_word",
    19. "search_analyzer": "ik_max_word"
    20. }
    21. }
    22. }
    23. }
    24. }'

    上面代码中,首先新建一个名称为accounts的 Index,里面有一个名称为person的 Type。person有三个字段。
    user
    title
    desc
    这三个字段都是中文,而且类型都是文本(text),所以需要指定中文分词器,不能使用默认的英文分词器。 Elastic 的分词器称为 analyzer。我们对每个字段指定分词器。

    1. "user": {
    2. "type": "text",
    3. "analyzer": "ik_max_word",
    4. "search_analyzer": "ik_max_word"
    5. }

    上面代码中,analyzer是字段文本的分词器,search_analyzer是搜索词的分词器。ik_max_word分词器是插件ik提供的,可以对文本进行最大数量的分词。