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"
}
}
}
}
默认的分词器为standard
分词器, 分析器测试
GET /_analyze
{
"analyzer": "standard",
"text": "Text to analyze"
}
#分词结果text|to|analyze
#《中国》分词结果
#中|国
standard分词器分词简单,英文情况下直接大写换小写按照空格区分,中文的时候直接按照字进行区分。
{
"analyzer": "english",
"text": "Text to analyze"
}
#分词结果 text|analyze
english分词器会自动过滤英语中一些较多的无效词语,比如 a,an,the
等等,英语场景中多为使用。
ik 分词器下载https://github.com/medcl/elasticsearch-analysis-ik,选择和es一样的版本,下载zip,放到{es}/plugins
下即可。
ik分词器可分为ik_max_word
和ik_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
的话,中国|国人
这两个词来进行检索的时候就会有问题。