前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch可扩展的开源弹性搜索解决方案

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

作者头像
硬核项目经理
发布2019-08-06 16:11:07
1.5K0
发布2019-08-06 16:11:07
举报

一、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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农老张 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档