以前面试,面试官总喜欢为这类问题,虽然有时候我们没有接触使用过这个东西,但是如果能掌握一些,还是比较好的
ES 英文:(elasticsearch)
它是一种分布式全文搜索引擎,基于Lucene(全文搜索框架)开发而来
优势:
- 分布式实时文件存储,每个字段皆能索引
- 集群,可扩展(理论上无上限)
- 高度集成的服务(RESTful风格的API,各语言客户端)
- 易学易用
旧的数据查询查询流程
关系数据库(MYSQL) -> 数据库DB-> 表TABLE-> 行ROW-> 列Column
Elasticsearch -> 索引库Indices -> 类型Types -> 文档Documents -> 字段Fields
ES集群可以包含多个索引(数据库),每个索引库中可以包含多个类型的表,每个类型包含多个文档,然后每个文档包含多个字段
DSL查询与过滤
由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL)
索引过程分为如下几个步骤
- 获取内容
- 建立文档
- 文档分析
- 文档索引
搜索组件主要组成部分
- 用户搜索界面
- 建立查询
- 搜索查询
- 展现结果
ElasticSearch 工作原理
ElasticSearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎
索引Index - 类似库
类型Type - 类似表
文档Document
映射Mapping
集群Cluster
是一个或多个节点的集合
节点Node
分片Share 和 副本Replica
ElasticSearch提供了易用但功能强大的RESTful API以用于与集群进行交互,这些API大体可分为如下四类:
- 检查集群、节点、索引等健康与否,以及获取其相关状态与统计信息
- 管理集群、节点、索引数据及元数据
- 管理集群、节点、索引数据及元数据
- 执行高级搜索操作,例如paging、filtering、scripting、faceting、aggregations及其它操作
执行查询分为2个阶段
分散阶段 和 合并阶段
分散阶段是向所查询的索引中的所有shard发起执行查询的过程
合并阶段是将各shard返回的结果合并、排序并响应给客户端的过程
向es发起查询的2个方式:
1、通过RESTful request api 传递查询参数 quert-string
2、通过发送 RESTful request body,也称作JSON 格式
一个分析器通过需要三个组件构成
字符过滤器,分词器,分词过滤器