专栏首页硬核项目经理的专栏ElasticSearch可扩展的开源弹性搜索解决方案

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),作者:ZyBlog

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Vim实用技巧

    1.*进行查找,一是光标会跳到下一个匹配项上,二是所有出现这个词的地方都会被高亮显示出来。如果没有高亮,运行:set hls

    硬核项目经理
  • 高性能MySQL【笔记】超详细

    一、MySQL架构与历史 A.并发控制 1.共享锁(shared lock,读锁):共享的,相互不阻塞的 2.排他锁(exclusive lock,写锁):排他...

    硬核项目经理
  • Vue.js权威指南

    1.MVP,从MVC演化而来,Controller/Presenter负责逻辑的处理,完全把View和Model进行了分享,主要的程序逻辑在Presenter里...

    硬核项目经理
  • 像SELECT*一样手撸Query DSL——ElasticSearch下篇

    大家好 泥腿子安尼特又和大家见面了。不知道大家昨晚过的如何,容我再孤寡孤寡孤寡几声

    老李秀
  • 智能对话机器人实战开发(1)- 体系结构和分类

    人工智能时代,以智能对话机器人为最核心的技术应用方向之一,实现人机之间通过自然语言的沟通和交流,是智能人机对话机器人的核心目标之一。尤其是Google Assi...

    数据饕餮
  • 智能对话机器人开发实战案例剖析(2)

    本文是《智能对话机器人开发实战案例剖析》系列的第2篇:智能对话机器人分类标准,旨在对智能对话系统的进行一个系统性的介绍。相关内容已同步录制成视频课程,发布在网易...

    数据饕餮
  • Git管理项目实例说明-记录和跟踪项目

    假设一个HTML项目,使用Git来记录和跟踪这个项目,包括以下内容: 1)创建版本库。 2)添加与修改文件。 3)创建新分支。 4)打标签并整理版本库。 5)克...

    洗尽了浮华
  • 【机器学习实战】第4章 基于概率论的分类方法:朴素贝叶斯

    第4章 基于概率论的分类方法:朴素贝叶斯 <script type="text/javascript" src="http://cdn.mathjax.org...

    片刻
  • 辞职理由千奇百怪,腾讯的也许最...

    最近本乐看到我们HR的小姐姐都是一脸苦逼,为啥?因为每逢“金三银四”就会有各种层出不穷的奇葩离职信~今儿乐乐就带你们细数一下这些年我见过的奇葩辞职理由。 吃...

    腾讯乐享
  • WCF传输安全(Transfer Security)的基本概念和原理:认证(Authentication)[上篇]

    对于任何一个企业级应用来说,安全(Security)都是一个不可回避的话题。如何识别用户的身份?如何将用户可执行的操作和可访问的资源限制在其允许的权限范围之内?...

    蒋金楠

扫码关注云+社区

领取腾讯云代金券