赞
踩
binary类型存储字符串base64处理之后的值
json格式没有date类型,ES中表示date类型的有以下三种:
1)、字符串格式,如’2020-01-01’或’2020/05/26 09:45:00’;
2)、long类型数值,表示从毫秒开始的计数;
3)、integer类型数值,表示从秒开始的计数;
内部date会转换成UTC时间并以毫秒表示其值;
日期查询会在内部转换为long类型形式的范围查询,并且聚合和存储字段的结果将转换为字符串(具体取决于该字段的日期转换格式);
日期将始终以字符串形式呈现,即使一开始在JSON文档中提供的类型为long;
//date类型字段定义 PUT /date_index_demo { "mappings": { "properties": { "date":{ "type": "date" } } } } PUT /date_index_demo/_doc/1 { "date":"2020-01-01" } PUT /date_index_demo/_doc/2 { "date":"2020-01-01T12:00:00Z" } PUT /date_index_demo/_doc/3 { "date":"2020-01-01T12:00:00" } PUT /date_index_demo/_doc/4 { "date":1420070400001 } //排序查询,内部会转为long类型进行处理 GET /date_index_demo/_search { "sort": [ { "date": { "order": "asc" } } ] }
日期的多种格式化形式
可以使用||分隔符指定多种日期格式,es会依次尝试每种格式,直到找到匹配的格式,将日期格式转换成字符串会优先使用第一种格式转化;
PUT /date_index_demo
{
"mappings": {
"properties": {
"date":{
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis"
}
}
}
}
存在的约束:
1)、一个索引当中仅允许一个join类型的映射;
2)、父文档与子文档一定要在同一个分片之上,这就意味着在做get/delete/update操作的时候需要指定相同的routing值;
3)、一个元素可以有多个子级,只允许有一个父级;
4)、允许在join类型的字段上添加一个新的关系;
5)、允许在一个元素中添加一个子级(要求元素需要存在父级);
使用父级join查询
父级join查询及聚合操作
参考has_child和has_parent查询,children聚合及inner hits;
join标识字段可以使用聚合和脚本查询,也可以使用parent_id查询;
同一父级对应多个子级
针对类似于ID、邮箱、域名、状态、邮政编码和标签之类的表示字段,在查询操作时以精确值作为条件,同时可作为排序和聚合操作;
如果针对文本内容做全文索引,使用text字段表示更合适;
数值数据不一定需要用数值类型来表示,若不用于range查询则可以使用keyword代替,因为keyword类型字段针对term或term-level的查询更加友好;
考虑将字段设置成keyword类型可考虑以下因素:
1)、针对该字段有没有range操作的需求;
2)、查询效率上的考虑,因为字段类型为keyword相比数值类型效率更高;
nested类型是object类型的一种特殊形式,其允许对象数组被索引且可以独立进行查询;
es没
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。