ES作为nosql使用,es是nosql吗
ES查询语法
参数拼接到查询路劲中查询,查询可以不指定 type 的类型
创新互联建站是一家集网站建设,元宝企业网站建设,元宝品牌网站建设,网站定制,元宝网站建设报价,网络营销,网络优化,元宝网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
查询结果部分字段说明:
value值部分会作为整体被查询, 不会被分词, 与match做区分, match的value是会被分词作匹配查询的.
返回的文档必须满足must子句的条件,并且参与计算分值
返回的文档必须满足filter子句的条件。但是不会像Must一样,参与计算分值
返回的文档可能满足should子句的条件。在一个Bool查询中,如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回。minimum_should_match参数定义了至少满足几个子句, 默认情况是1
返回的文档必须不满足must_not定义的条件。
如果一个查询既有filter又有should,那么至少包含一个should子句。
bool查询也支持禁用协同计分选项disable_coord。一般计算分值的因素取决于所有的查询条件。
bool查询也是采用more_matches_is_better的机制,因此满足must和should子句的文档将会合并起来计算分值。
使用 _source 可以只查询需要展示的列, 相当于 sql 的 select offset,methodName from ...
from表示从第几行开始,size表示查询多少条文档。from默认为0,size默认为10,
如
聚合查询的结构:
举例说明:
比如求所有文档某个字段求最大、最小、和、平均值, 可以对某个field进行计算.
以avg为例, 计算offset在所有文档中的均值
运行结果:
该聚合一般域其它 single-value 聚合联合使用,比如在计算一个字段的平均值的时候,可能还会关注这个平均值是由多少个值计算而来。
例子:统计搜索结果中maiDianType字段出现的次数
搜索结果:
基于文档的某个值(可以是特定的字段,也可以通过脚本计算而来),计算文档非重复的个数(去重计数),相当于sql中的distinct。
例子: 统计搜索结果中maiDianType出现的种类
搜索结果: maiDianType共有6种值
基于文档的某个值(可以是特定的数值型字段,也可以通过脚本计算而来),计算出一些统计信息(min、max、sum、count、avg5个值)。
例子: 基于useTime进行值统计
ps: 这个例子中是基于脚本进行的统计
统计结果:
与stats功能相似, 比stats多4个统计结果: 平方和、方差、标准差、平均值加/减两个标准差的区间
例子:
结果:
对指定字段(脚本)的值按从小到大累计每个值对应的文档数的占比(占所有命中文档数的百分比),返回指定占比比例对应的值。默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值,也可以指定分位置.
例子:
结果:
ps:
"1.0":30 代表: useTime30的, 占比1%
"99.0":237 代表: useTime237的, 占比99%
例子: 指定聚合的百分比
查询结果:
词聚合。基于某个field,该 field 内的每一个【唯一词元】为一个桶,每个桶内可以做再次聚合.
列子: 以prodSubNo的每个值作为聚合, 聚合结果默认排序为从大到小
搜索结果:
doc_count_error_upper_bound: //文档计数的最大偏差值
sum_other_doc_count: , //未返回的其他项的文档数
列子: 以prodSubNo的每个值作为聚合, 得到的桶继续做avg子聚合, 得到每个prodSubNo下的useTime的avg聚合结果
搜索结果:
基于一个条件,来对当前的文档进行过滤的聚合。
例子: 对查询结果进行过滤, prodSubNo=601001聚合过滤, 可对过滤后的内容进行子聚合查询, 这里使用stats统计聚合
查询结果:
基于多个过滤条件,来对当前文档进行【过滤】的聚合,每个过滤都包含所有满足它的文档(多个bucket中可能重复),先过滤再聚合。
例子: 使用prodSubNo=601001和maiDianType=script分别对索引结果进行过滤
搜索结果:
范围分组聚合。基于某个值(可以是 field 或 script),以【字段范围】来桶分聚合。范围聚合包括 from 值,不包括 to 值(区间前闭后开)。
例子: 对于useTime字段值进行0-20和20-40范围内的聚合
ps: 对范围聚合后的结果,还可以进行子聚合
搜索结果:
elasticsearch可以代替NoSQL吗
elasticsearch可以代替NoSQL的。
优点:
1.高并发。实测es单机分配10g内存单实例,写入能力1200qps,60g内存、12核CPU起3个实例预计可达到6000qps。
2.同机房单条数据写入平均3ms(比mysql慢,mg不清楚)
3.容错能力比mg强。比如1主多从,主片挂了从片会自动顶上
4.满足大数据下实时读写需求,无需分库(不存在库的概念)。
5.易扩展。实例间做下配置即可扩展并发性和容积,自动分配的写入机制,无需操心传统db中多主同步的诟病
6.支持较复杂的条件查询,group by、排序都不是问题
7.具有一定的关系性,但不用担心大字段的问题
缺点:
1.不支持事务
2.读写有一定延时(不知道其他大牛是否遇到这个问题),我是写入一分钟后再做读操作
3.无权限管理
也是最近开始用,说下我的应用场景,用来存储线上日志做实时分析(类似淘宝鹰眼,但是完全实时),存储结构化的日志及原文,也调研过很多db,mg也有考虑过,相比之下实现和运维成本mg都要高不少
我的场景如下:
1.高并发,设计日志并发80wqps(实际存储会用一些策略缩小规模,约万级别)
2.单条数据体积大,允许最大20k
3.要求支持条件查询
4.实时性高,目前从日志存储开始到出分析结果3分钟,包含前面提到的读写延时(求解决方案)
ES自定义分词器
es的分词器往往包括3个低级构建块包:
Standard Analyzer
标准分析仪按照Unicode文本分段算法的定义,将文本分割成单词边界的分词。它删除了大多数标点符号,小写显示分词,并支持删除stop words。
Simple Analyzer
当遇到不是字母的字符时,简单的分析器会将文本分成条目。小写显示分词。
Whitespace Analyzer
空格分析器遇到任何空格字符时都会将文本分为多个项目。不会把分词转换为小写字母。
Stop Analyzer
停止分析仪和Simple Analyzer类似,但也支持stop words的删除。
Keyword Analyzer
一个“noop”分析器,它可以接受任何给定的文本,并输出完全相同的文本作为一个单词。
Pattern Analyzer
使用正则表达式拆分分词,支持lower-casing和stop words。
Language Analyzers
Elasticsearch提供许多语言特定的分析器,如英语或法语。
Fingerprint Analyzer
一个专门的分析仪,它可以创建一个可用于重复检测的指纹。
对中文文本以英文逗号作为分隔符分词:
将分析器设置到索引上
获取分词结果
es 节点层面的默认分词设置已经废弃,不支持了。就是说在 elasticsearch.yml 配置诸如:
无效,会导致es启动失败:
推荐在索引层面动态设置。
分享文章:ES作为nosql使用,es是nosql吗
标题路径:http://ybzwz.com/article/dsscsoh.html