🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Mapping(映射) **Mapping** 原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html)(修改该链接为官网对应的链接) 译文链接 : [http://www.apache.wiki/display/Elasticsearch](http://www.apache.wiki/display/Elasticsearch)(修改该链接为 ApacheCN 对应的译文链接) 贡献者 : @您的名字 ## Meta-Fields (元数据字段) ``` 每个 document 都有与之相关的元数据,比如 _index,映射 _type 和 _id meta-fields 。当有这些行为时可以定制这些meta-fields创建一个映射类型。 ``` **Identity meta-fields **(特性 meta-fields )  _index     索引文档所属。 _uid          一个复合字段包含 **_type** 和 **_id **组成。 _type        文档的映射类型。 _id            文档的ID。 Document source meta-fields** (文档源 meta-fields )** `_source` 原始** JSON **表示文档的主体**。** `_size` **             _source **字段的大小字节**, mapper-size **提供的插件**。** Indexing meta-fields(索引 meta-fields ) **_all **           全方位字段索引所有其他字段的值。 **`_field_names`**            所有字段的文档包含空值。 **Routing meta-fields** (路由 **meta-fields** ) `_parent`                用于创建父子两个映射类型之间的关系。 **`_routing`** **               自定义路由值文档路由到一个特定的 shard 。** **Other meta-field (其他**meta-field **)** **`_meta`** **              特定于应用程序的元数据。** ### `_all`** field** 这个 **_all field** 是一个特殊的全方位连接的所有其他字段的值为一个大的字符串,使用空间作为分隔符,然后分析和索引,但不能存储。这意味着它可以搜索,但不是检索。 **_all field** 字段允许您搜索文件中的值不知道哪个字段包含的值。这使其成为一个有用的选项时,开始使用一种新的数据集。例如: ``` 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 1970" } } } ``` 该 _all field 将会包含这些条款 :[ "john", "smith", "1970", "10", "24" ] 注意 所有的值作为字符串 date_of_birth字段在上面的例子中是被认为是一个日期字段,所以将索引一个术语代表 1970-10-24 00:00:00 **UTC**。**_all field** ,然而,把所有的值作为字符串,所以日期值与三个字符串索引术语:“1970”,“24”,“10”。 重要的是要注意,**_all field** 结合原来自每个字段的值为字符串。它不将从每个字段。 **_all field **字段只是一个文本字段,并接受其他字符串字段接受相同的参数,包括 **analyzer** ,**term_vectors**,**index_options**和存储。 **_all field **字段可能是有用的,尤其是当使用简单探索新的数据过滤。然而,通过连接字段值为一个大的字符串,_all领域失去了区分短字段(更相关的)和长字段(不那么相关)。使用情况下搜索的相关性是很重要的,最好是专门查询单个字段。 **_all field **字段并不是免费的:它需要额外的CPU周期和使用更多的磁盘空间。如果不需要,它可以完全禁用或定制域基础上。 **Using the _all field in queries** (在查询中使用_all字段) **query_string **和 **simple_query_string **查询查询 **_all field **字段默认情况下,除非另一个字段指定: ``` GET _search { "query": { "query_string": { "query": "john smith 1970" } } } ``` 也是一样的吗?q = 参数搜索请求URI(重写内部query_string查询): ``` GET _search?q=john+smith+1970 ``` 其他的查询,例如 **match** 和 **term** 查询,需要显式地指定 _all field 参考第一个例子。 Disabling the `_all` field(禁用 _all field ) _all field 可以完全的禁用每种类型通过设置参数** `enabled` to `false`**: ``` PUT my_index { "mappings": { "type_1": { "properties": {...} }, "type_2": { "_all": { "enabled": false }, "properties": {...} } } } ``` * 1\. _all field 在 type_1 中是不可用的。 * 2. _all field 在 type_2 中是完全不可用的。 如果 _all field 是不可用的,这时 URL 搜索请求和 **query_string** 和 **simple_query_string** 将不无法用它来查询(参见使用中的 **_all** 字段查询)。您可以配置与 **index.query **他们使用不同的领域。**default_field **设置: ``` PUT my_index { "mappings": { "my_type": { "_all": { "enabled": false }, "properties": { "content": { "type": "text" } } } }, "settings": { "index.query.default_field": "content" } } ``` * 1\. **_all****field** 对 **my_type** 类型是禁用的。 * 2\. **query_string **查询将默认查询内容字段索引。 Excluding fields from `_all (从 _all 排除字段)` 单个字段可以包含或排除从 **_all field** 中用 **include_in_all** 进行设置。 Index boosting and the `_all` field ( 索引提高) 单个字段可以被提高在索引的时候,用 boost 参数。 这个 _all 字段考虑了这些增强: ``` PUT myindex { "mappings": { "mytype": { "properties": { "title": { "type": "text", "boost": 2 }, "content": { "type": "text" } } } } } ``` 1\. 当查询这个 _all 字段时,词起源于标题字段的词是起源于内容字段的2倍。 waring 使用index-time提高_all领域产生重大影响查询性能。更好的解决方案通常是单独查询字段,和可选的查询时间增加。