【Elasticsearch】Elasticsearch 分词器对比

索引信息查询

GET /{索引名称}例如/elktable

{
    "elktable": {
        "aliases": {},
        "mappings": {  // 索引字段信息
            "properties": {
                "@timestamp": {
                    "type": "date"
                },
                "@version": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "id": {
                    "type": "long"
                },
                "movie_id": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "title": {
                    "type": "text",  //字段类型
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                }
            }
        },
        "settings": {
            "index": {   // 索引属性
                "creation_date": "1595212978319",
                "number_of_shards": "1",  
                "number_of_replicas": "0",
                "uuid": "jbeuuVaoRniVcz4cBYZJSA",
                "version": {
                    "created": "7080099"
                },
                "provided_name": "elktable"
            }
        }
    }
}

分词处理

1.standard分词器

默认的分词器为standard分词器, 分析器测试

GET /_analyze
{
  "analyzer": "standard",
  "text": "Text to analyze"
}
#分词结果text|to|analyze
#《中国》分词结果
#中|

standard分词器分词简单,英文情况下直接大写换小写按照空格区分,中文的时候直接按照字进行区分。

2.english分词器

{
  "analyzer": "english",
  "text": "Text to analyze"
}
#分词结果 text|analyze

english分词器会自动过滤英语中一些较多的无效词语,比如 a,an,the等等,英语场景中多为使用。

3.ik分词器

ik 分词器下载https://github.com/medcl/elasticsearch-analysis-ik,选择和es一样的版本,下载zip,放到{es}/plugins下即可。

ik分词器可分为ik_max_wordik_smart

  • ik_max_word会按照词库中的信息尽可能的多分出很多词,但是词会有重复

  • ik_smart中不会分出重复词。

{
  "analyzer": "ik_max_word",
  "text": "我是一个中国人"
}
#我||一个中国|一个||个中|||中国人|中国|国人
{
  "analyzer": "ik_smart",
  "text": "我是一个中国人"
}
#我||一个|中国人

通过测试即可看到两种类型分出来的词的差距。那么问题来了,到底应该使用哪一种进行分词呢?es中字段创建的时候可如下设置analyzer和search_analyzer

{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",  #插入文本时用的分词器
                "search_analyzer": "ik_smart"  #搜索的时候用的分词器
            }
        }

}

比如文本录入的时候用ik_max_word来进行分词,的分词结果为

#我|是|一个中国|一个|一|个中||个|中国人|中国|国人

这个时候,使用ik_smart来检索的时候,通过中国|国人|中国人都可以进行检索。但是反过来,如果录入的时候使用ik_smart的话,中国|国人这两个词来进行检索的时候就会有问题。

猜你喜欢

转载自blog.csdn.net/qq_30285985/article/details/107472854