6.1 聚合
6.1.1一般查询结构
aggs可以顶替任意数量的聚合,兼职定义了聚合的名称,举例给出years以及words的聚合
6.1.2 可用的聚合
分为度量聚合,桶聚合
度量聚合:接受输入文档集生成至少一个统计值
min、max、sum、avg聚合:给出一个返回最小year值的聚合
使用脚本:使用script脚本,生成聚合
value_count聚合:可以计算某一个字段的某一个值出现过多少次,给出的一个例子是在characters字段计算所有的标记
stats和extended_stats聚合:stats聚合可以返回前面的例子中的聚合,例如一个year字段出现的最大以及最小的年份等,使用 extended_stats的时候,可以额外的计算平方和方差等计算
桶聚合:返回很多子集,限定输入数据到一个特殊的叫桶的子集中
terms聚合:简单按照某一个字段聚合,可控制升序或者降序
range聚合:对于数据类型为int,long等数字可以使用
date_range聚合:对于字段类型为datetime的聚合可以使用
IPV4range聚合:对于数字的形式是ipv4结构的,可以允许在一定的范围内聚合
missing聚合:缺失某些字段的聚合,例如缺失一个叫title字段的所有数据的聚合
nested聚合:看的不是很明白
histogram聚合:聚合定义桶,比如可以设置间隔为多少的一些聚合,例子给出了间隔为100的聚合,为桶范围长度
date_histogram聚合:对于时间的聚合定义桶,例如桶长度为10天,三个月等
时区:所有日期存成utc时区,可以定义用于显示的时区,可设置小时偏移,时间格式,时区名字等
geo_distance聚合:离某一个原点多少到多少的距离有多少个数据,可以定义为m,km等单位
geohash_grid聚合:把区域组织成一个网格,分配每个位置到相应的单元格中,例子给出了按照5*5平方公里精度的聚合
6.1.3 聚合的嵌套
聚合可以包含多个嵌套,例如按照男女聚合之后,对于每一个性别按照年龄聚合,在代码里实现为子聚合
6.1.4桶排序和嵌套聚合
可以在桶的键值或者文档的数量上排序,还可以使用嵌套聚合里面的值,给出了按照嵌套聚合里的平均值排序的例子
6.1.4全局和子集
全局是聚合的时候不考虑查询条件,子集是聚合的时候是在查询条件返回的值上面进行聚合的
6.2切面
切面是聚合的一个子集,将来可能会被废除,不确定2.1.0当前版本是否还有此属性
6.2.1文档结构
为了验证切面,定义的一个文档结构
6.2.2返回的结果
_type使用切面的类型,missing多少文档没有足够的数据,total切面计算中所有的数量,other未被包含进返回计数的切面值
6.2.3使用查询进行切面计算
给出一个简单的查询,query查询,返回未query切面的信息
6.2.4使用过滤器进行切面计算
使用filter切面进行查询,filter切面的速度更快一些
6.2.5terms切面
允许制定一个字段并且返回该字段上最频繁的词条,还可以设置size,shard_size等参数
6.2.6基于范围的切面
对于指定字段范围内的汇总,类似range聚合
6.2.7数值和日期直方图切面
类似histogram聚合以及date_histogram聚合
6.2.8数值型字段统计数据的计算
类似聚合中stats的度量聚合,max,min,avg等
6.2.9词条统计数据的计算
为terms_stats切面,提供基于一个字段的值统计另一个字段的能力,给出的例子为total字段以及tags字段的terms_stats统计,不是太懂
6.2.10地里切面
类似于geo_distance聚合,没有搞清楚有啥区别
6.2.11切面结果的过滤
任意一个过滤器都可以用在切面上,只要添加一个节点就可以,切面计算时是基于搜索结果的文档,即先过滤后聚合之类的
6.2.12内存考虑
切片比较耗费内存,因为加载到缓存中来计算切面的,并且尽量使用更低精度的数据
6.3使用建议器
建议器即是suggest,当输入的时候会根据输入自动的提示你应该说什么,或者允许纠正用户的拼写错误
6.3.1可用的建议器类型
提供三种建议器
term:更正传入的单词
phrase:工作在短语上,返回一个恰当的短语
completion:目的是为了提供快速高效的自动完成结果,常用的是这个建议器
6.3.2包含建议器
使用term建议器,输入一个text,可以规定在某些字段给出建议的值,例子中给出了在title字段以及_all字段给出建议的值
6.3.3term建议器
是基于字符串编辑举例工作的
可进行配置的有:test,field在哪个字段,analyzer分析器的名字,size建议返回最大字数,sort建议的排序默认为score,还可以为频率
还可以进行其他的选项,例如lowercase_terms,最大编辑距离,等参数
6.3.4phrase建议器
term只是针对于单个词,但是phrase是基于整个短语来计算的,给出了一个例子,短语类型的建议,可配置的一些属性类似term
6.3.5completion建议器
给出如何建立completion建议器的mapping结构
索引数据:给出对应mapping结构的数据,塞进索引,给出的结构是author以及ac字段,其中ac字段使用completion,其中需要告诉input以及output来告诉建议器如何的输出结果
查询索引中的completion建议器数据:给出如何使用数据进行搜索,貌似只是建议,还不是搜索
指定权重:在做索引的时候设置权重,返回的时候可以看到
6.4预匹配器
示例索引:给出了如何建索引,为notifier的索引,并且指定的是一个字段
预匹配器的准备:对查询建立索引,然后发送文档给Elasticsearch,看看索引中哪个索引被匹配到,先把查询索引到预匹配器,任何与预
定义的匹配条件的图书变得可用时,通知用户,首先将查询注册到预匹配器中,然后程序向预匹配器提供文档,并检查es是否找到相应的查询
深入:相当于一个预定的功能,先告诉ES对哪一个感兴趣,然后有相应数据的时候会通知相关感兴趣的用户
6.5文件的处理
安装一个Elasticsearch-mapper-attachments插件之后,需要将文件编码成Base64,使用命令为base64 -i elample.doc -o elample.doc.base64,将编码完的内容放进json格式里面,然后做索引,查询的时候跟之前查询没太大区别
6.6地理
6.6.1为空间搜索准备映射
定义一个mapping,里面包含了name以及location信息
6.6.2示例数据
将数据塞进ES
6.6.3示例查询
基于举例的排序:查询的时候给出一个原点信息,并且定义单位为km,按照距离的远近进行排序
过界框过滤:查询中给出一个filter,里面定义左上角顶点信息,并且定义右下角顶点的信息,最后过滤出来在这个长方形框几面的一些文档
距离的限制:可以以某个坐标为原点,按照半径为多少进行过滤,实际常用的类似艺龙这种的,长按一个地方会出现周威的信息,可能用的
就是类似的距离限制,第一次按距离为多少,第二次为多少
6.6.4任意地理形状
引入的是geo_shape的类型,可以自定义形状,里面有一些基本的形状
点:包含经纬度就可以
包络线:Envelope提供左上和右下两个坐标定义一个框
多边形:polygon一个多边形通过一个连接点的列表创建,数组中第一个点与最后一个点必须一样,确保多边形是闭合的
多个多边形:multipolygon定义多个多边形
示例用法:定义一个多边形,包含了英国的坐标点,为闭合的,查询哪些位置是位于英国的
索引中形状的排序:将所有的形状给出一个id,查询的时候只需要给id就可以,shape变成indexed_sgape
6.7卷动api
使用分页的时候,之前使用的是setfrom,setsize的方法,但是这种方法有一定的缺陷,如果需要大量的数据的话,比如说第一百页的数据,那么es需要先得到100页所有的数据,然后抛弃掉前99页的数据,仅仅留下第一百页的数据,有一定的缺陷,使用卷动api类似于数据库的游标,记录上一次的一个位置,为下一次的查询进行服务,缺点是不能长时间存储这些信息,有一定的时间限制
6.7.1问题定义
上述的问题场景
6.7.2作为解决方案的卷动
给出一个查询,使用scroll,返回结果并且会有scroll_id,下次查询可以使用scorll_id
6.8多词条过滤
在某一个字段过滤多个词条的文档,遍历所提供的词条,匹配到的加载到biteset结构中被缓存起来
默认是plain方法
fielddata:生成词条过滤器,过滤加载到fielddata缓存中的字段,对大量词条上过滤有效
bool,and,or生成bool,and,or过滤器,这些过滤器已经被缓存
词条查找:看的不是很懂
词条查找的缓存设置:可以在yml里面设置查找机制使用的缓存