Elasticsearch 5.0 _all field的简单认识
前言:本文的目的是为后续磁盘空间利用优化做铺垫,主要知识点来源于官网
一、_all 是什么
在Elasticsearch中,_all field维护这一个很大的字符串数组(text类型)。这个字符串是其他字段先经过分词,然后组合在一起形成的。组合方式是以空格为分隔符、无序。
官网有个例子
PUT my_index/user/1
{
"first_name": "John",
"last_name": "Smith",
"date_of_birth": "1970-10-24"
}
GET my_index/_search
{
"query": {
"match": {
"_all": "john smith new york"
}
}
}
PUT进去三个field的数据,此时_all维护的字符串数组如下: [ "john", "smith", "1970", "10", "24" ]
二、_all 作用是什么
允许在不知道field的情况下,进行search
有些情况下你根本不知道你搜的value属于哪个field。上文脚本中直接用_all代替了
_all field是一个text类型,并且同其他的普通字符串field一样能接受如下参数来修饰:analyzer、term_vectors、index_options、store
你可以通过如下命令来disable掉_all field
PUT my_index
{
"mappings": {
"type_1": {
"properties": {...}
},
"type_2": {
"_all": {
"enabled": false
},
"properties": {...}
}
}
}
三、disable掉_all会怎样
- 消极影响:无法在不知field的情况下进行一些value搜索等操作
- 积极影响:减轻CPU负担,减少磁盘占用
欢迎转载,注明出处。有任何问题和建议,欢迎留言讨论,也可以发我邮箱wenbya@outlook.com