ElasticSearch可扩展的开源弹性搜索解决方案

一、ElasticSearch集群入门

A.什么是ElasticSearch

1.概念:

  • 索引(index):是ElasticSearch存放数据的地方
  • 文档(document):是ElasticSearch中存储的主要实体
  • 文档类型:文档类型可以区分不同的对象
  • 节点和集群:ElasticSearch支持在多台协同工作的服务器上运行
  • 分片:节点的计算能力或硬件限制不够时,可以将数据切分,每部分是一个单独的Apache Lucene索引,称为分片(shard)
  • 副本:为了提高查询的吞吐量或实现高可用性,可以启用分片副本,是对原始分片的一个精确拷贝

2.状态查看:

  • http://localhost:9200/
  • http://localhost:9200/_cluster/health?pretty

3.操作:通过REST操作数据,GET、POST、PUT、DELETE

二、搜索数据

A.查询和索引的过程

1.索引过程:准备发磅到ES的文档并在索引中存储文档的过程

2.搜索过程:匹配满足查询条件的文档的过程

3.分析过程:预备字段内容,并将其转换为可以写放Lucene索引的词项(term)的过程

  • 词条化:输入文本被分词器转换为一个词条流
  • 过滤:若干个过滤器处理词条流中的词条

4.分析器:是带有零个或多个过滤器的分词器

B.查询ElasticSearch

1.将多个简单查询封闭为一个JSON格式对象发送给ElasticSearch,称为:查询DSL

2.语法:

  • curl -XGET 'localhost:9200/library/book/_search?q=title:crime&pretty=true'
  • curl -XGET 'localhost:9200/library/book/_search?pretty=true' -d '{"query":{"term":{"title":"crime"}}}'
  • curl -XGET 'localhost:9200/library/book/_search?pretty=true' -d @query.json

C.基本查询

1.term:匹配给定字段有某个词项的文档

2.terms:匹配包含某些词项的文档

3.match:提取参数中难写的取值,分析这些值 ,基于它们构建适当的查询

4.multi_match:与match类似,不同在于通过fields配置可作用于多个字段上

5.query_string:支持Apache Lucene所有的查询语法

6.field:query_string查询的简化版本

7.ids:过滤返回的文档,只得到其中包含指定标识符的文档,作用在_uid字段

8.prefix:找到某个字段以给定前缀开始的文档

9.fuzzy_like_this:查询得到与给定内容相似的所有文档,基于模糊串,并选择其产生的最好的区分词项

10.fuzzy_like_this_field:与fuzzy_like_this类似,区别在于只作用在单个字段,不支持fields属性

11.fuzzy:第三类模糊查询通过计算给定词项与文档的编辑距离来得到结果,消耗CPU资源,对需要模糊匹配的场景比较有用

12.match_all:匹配索引中所有文档的查询

13.wildcard:允许我们在要查询的内容中使用符*和?,在查询体部分与term非常相似,性能差

14.more_like_this:等到与所提供文本相似的文档

15.more_like_this_field:与more_like_this相似,不同在于只作用在半单个字段,不支持fields属性

16.range:可以在某个范围内在数值型字段和字符串型字段上查找文档,只作用在单个字段上,查询的参数封装在字段的名称中

D.过滤查询结果

1.在query属性下添加filter字段就可以在任何搜索中使用过滤器

2.range:将搜索范围限制在字段取值在给定界限内的文档

3.exists:只选择有指定字段的文档

4.missing:与exists相反,还可以指定将哪些值作为空值处理

5.script:使用一个计算得到的值过过滤文档

6.type:返回符合指定类型的所有文档

7.limit:限制对给定查询的每个分片返回的文档数目

8.ids:适合需要过滤某些具体文档的场景

9.bool、and、or和not可以组合过滤器

10.使用"_name"可以命名过滤器

E.复合查询

1.bool:should可以匹配也可以不匹配、must必须匹配、must_no必须不匹配

2.boosting:将两个查询封装在一起,并降低其中一个查询所返回文档的分值

3.constant_score:用于封装另一个查询(过滤器),被封闭查询(过滤器)返回的每个文档都得到一个恒定分值,允许我们严格控制赋予被查询或过滤器匹配的每个文档的分值

4.indices:需要在多个索引上执行一个查询时非常有用

5.custom_filters_score:允许我们封装一个查询和若干个过滤器

6.custom_boost_factor:允许我们封装另外一个查询,并将该查询返回的文档的分值乘以一个指定的因子

7.custom_score:通过script为另一个查询定制分值

F.数据排序

1."sort":[{"_score":"desc"}],默认按得分最高的

G.使用脚本

1.script:包含脚本代码;lang:指示脚本使用的语言,默认mvel;params:包含参数的对象

2.可用的对象:doc,访问基于计算分值或者字段取值找到的当前文档;_source,可以访问当前文档的源,以及在其中定义的取值 ;_fields,用于访问文档中的字段取值

三、扩展结构与搜索

1.关闭动态映射:dynamic:false

2.空间索引:geo_point

四、搜索优化

1.boost权值影响排序结果

2.同义词过滤器synonym

3.跨度查询:span_term、span_first、span_near、span_or、span_not,指一个字段中开始和结束的词条位置

五、组合索引、分析和搜索

1.父子映射:_parent

2.从其他系统获取数据:river

六、搜索之外

1.统计:query统计、filter统计、terms统计、range统计、histogram统计、statistical统计、terms_stats统计、geo_distance统计

2.相似

3.反查

七、管理集群

A.监控集群状态与健康状况

1.健康状态:curl http://localhost:9200/_cluster/health?pretty

2.索引统计:curl http://localhost:9200/library/_stats?pretty

B.实例和集群状态诊断工具

1.Bigdesk插件

2.elasticsearch-head插件

3.elasticsearch-paramedic插件

4.SPM工具

C.网关

1.可以使用本地、hadoop、Amazon s3

D.节点探索

1.默认允许使用zen探索(zen discovery),并提供了多播(multicast)和单播(unicast)两种探索方法

八、问题处理

1.再平衡(rebalancing)是在集群中的各个不同的节点之间移动分片的过程

2.预热:_warmer

原文发布于微信公众号 - 硬核项目经理(fullstackpm)

原文发表时间:2017-10-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券