Mapping
每个 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": {...}
}
}
}
如果 _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"
}
}
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领域产生重大影响查询性能。更好的解决方案通常是单独查询字段,和可选的查询时间增加。