Elasticsearch中的根对象(Root Object)

映射的最顶层被称为根对象。它包含了以下几个部分:

<1>属性区域,列举了文档中包含的每个字段的映射信息。

<2>元数据字段:各种元数据字段,它们都以”_“开头,包括:_index    _type  _id  _version  _score    _source

<3>控制用于新字段的动态探测的设置,如analyzer,dynamic_date_formates和dynamic_templates。

<4>其它的可以用在根对象和object类型中的字段上的设置,如enabled,dynamic和include_in_all.

属性:

文档字段或者属性中最为重要的三个设置:

<1>type:字段的数据类型,比如string和date

<2>index:一个字段是否需要被当做全文进行搜索(analyzed),被当做精确值来进行搜索(not_analyzed)

<3>analyzer:全文字段在索引时(Index time)和搜索时(search time)使用的analyzer。

元数据:_source字段

默认情况下,ES会将表示文档正文的JSON字符串保存为_source字段。和其它存储的字段一样,_source字段也会在保存到磁盘之前被压缩。

这个功能几乎是总被需要,因为它意味着:

<1>完整的文档在搜索结果中直接就是可用的,不需要额外的请求来得到完整的文档。

<2>_source字段让部分请求成为可能------------搜索结果如果不需要文档中的全部字段的时候,可以选择其中的几个字段进行显示

<3>当映射发生变化需要对数据进行重新索引的时候,可以直接在ES当中完成,而不需要从另外一个数据存储当中获取文档。

<4>调试结果更容易,因为可以清楚的看到每个文档中包含的内容,而不需要对一个ID列表来对文档的内容进行猜测。

_source字段的存储肯定会占用大量的存储空间,当以上的各种优点对你的项目没有任何帮助的时候,可以禁用_source字段。

禁用_source字段的方法:

PUT /my_index
{
    "mappings": {
        "my_type": {
            "_source": {
                "enabled":  false
            }
        }
    }
}

在一个搜索请求当中,你可以只要求返回部分字段,通过在请求正文当中指定_source参数:

GET /_search
{
    "query":   { "match_all": {}},
    "_source": [ "title", "created" ]
}
这些字段的值会从_source字段当中提取出来并返回,而不是完整的_source。

元数据:_all字段

他是一个特殊的字段,将其他所有字段的值当做一个大的字符串进行索引。query_string查询语句在没有指定特定查询字段的时候 ,默认就是对_all字段进行搜索。

当你对文档的最终结构还不确定的时候,可以应用_all字段进行搜索。

GET /_search
{
    "match": {
        "_all": "john smith marketing"
    }
}
_all字段可以通过下面的映射设置来禁用:

PUT /my_index/_mapping/my_type
{
    "my_type": {
        "_all": { "enabled": false }
    }
}

可以使用include_in_all字段来对每个字段进行设置,是否需要将它包含在_all字段当中,默认值是true。在一个对象设置include_in_all会改变其中所有字段的默认设置。

如果你只需要将部分字段添加到_all字段中,可以将include_in_all默认设置为对所有字段禁用,然后对你选择的字段启用:

PUT /my_index/my_type/_mapping
{
    "my_type": {
        "include_in_all": false,
        "properties": {
            "title": {
                "type":           "string",
                "include_in_all": true
            },
            ...
        }
    }
}

值得注意的地方是,_all字段也是一个被解析过的string字段。它使用默认的解析器来进行解析,无论来源字段中设置的是什么解析器。和任何string字段一样,你也可以配置_all字段应该使用的解析器:

PUT /my_index/my_type/_mapping
{
    "my_type": {
        "_all": { "analyzer": "whitespace" }
    }
}
元数据:文档ID

和文档ID相关的有四个元数据字段:

<1>_id:文档的字符串ID

<2>_type:文档的类型

<3>_index:文档的索引

_id字段有一个比较重要的设置:path,他用来告诉ES,文档应该从某个字段当中抽取一个值来作为自身的_id

PUT /my_index
{
    "mappings": {
        "my_type": {
            "_id": {
                "path": "doc_id" 
            },
            "properties": {
                "doc_id": {
                    "type":   "string",
                    "index":  "not_analyzed"
                }
            }
        }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值