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://azwzsj.com/article/dsscsoh.html