企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Mapping # 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领域产生重大影响查询性能。更好的解决方案通常是单独查询字段,和可选的查询时间增加。