1. _source
存储文档的的原始信息,_source字段默认是存储的,如果某个字段的内容非常的,业务里面只需要对该字段进行搜索,最后返回文档的id,查看文档内容会再次到mysql,或者Hbase中获取,把大字段的内容存放在ES中只会增大索引,这一点文档数量越大,效果越明显,如果一条数据节省几kb,放大到亿万级的量也非常可观,这时候我们只需要禁用_source字段,在ES中只存储倒排索引,不保留原始字段的值。
//关闭所有字段的_source
PUT blog/article/_mapping
{
"_source": {
"enabled": false
},
"properties": {
"id":{
"type": "long"
},
"title":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"content":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"postdate":{
"type": "date",
"format": "yyyy-MM-dd HH:mm || yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
}
}
}
//包含与排除字段的_source
PUT blog/article/_mapping
{
"_source": {
"includes":["id","title","postdate"],
"excludes":["content"]
},
"properties": {
"id":{
"type": "long"
},
"title":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"content":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"postdate":{
"type": "date",
"format": "yyyy-MM-dd HH:mm || yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
}
}
}
2. _all
超级字段,_all字段是把其它字段拼接一起的超级字段,所有的字段用空格分开,_all字段会被解析和索引,但是不存储。所有默认情况下_all字段不能高亮。只有当你只想返回包含某个关键字的文档,但是不明确搜索某个字段的时候,才需要使用_all字段,这样会增加索引的大小。
PUT blog/article/1
{
"id":1,
"title":"learn java",
"content":"Svn Git。"
}
GET blog/_search
{
"query": {
"match": {
"_all": "java"
}
}
}
_all 包含["1","learn","java","Svn","Git"]
禁用 _all 使用copy_to生成新字段
PUT blog/article/_mapping
{
"_all": {
"enabled": false
},
"properties": {
"id":{
"type": "long"
},
"title":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"copy_to": "title_content"
},
"content":{
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"copy_to": "title_content"
},
"postdate":{
"type": "date",
"format": "yyyy-MM-dd HH:mm || yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
}
}
}
获取:
GET blog/_search
{
"query": {
"match": {
"title_content": "java"
}
}
}
4.举例:
_source 原始文档:"title":"我是中国人" ,"content":"热爱中国"
_all:我是中国人 热爱中国