Elasticsearch的Search详解
介绍
ES不是新技术,是将全文检索和数据分析、分布式整合到一起。
基于lucene开发,提供简单的restful api接口、java api接口、其他语言开发接口等。
实现了分布式的搜索引擎和分析引擎。
补充数据库在现在互联网领域中的不足,如:全文检索、同义词处理、相关度排名、复杂数据分析、海量数据近实时处理等。
相关概念
倒排索引
对数据进行分析,抽取出数据中的词条,以词条作为key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。
Near Realtime (NRT) 接近实时
近实时。有两层概念,从写入数据到可搜索数据有一个延迟(1秒左右,分析写入数据的过程);基于ES执行搜索和分析可以达到秒级别的响应。
Cluster&Node
Cluster-集群。包含多个节点,每个节点通过配置来决定属于哪一个集群(默认集群命名为“elasticsearch”)。
对于中小型应用来说,最初只有一个节点也是很正常的。
Node-节点
集群中的一个节点,节点的名字默认是随机分配的。节点名字在运维管理时很重要,
节点默认会自动加入一个命名为“elasticsearch”的集群,如果直接启动多个节点,
则自动组成一个命名为“elasticsearch”的集群。当然单节点启动也是一个集群。
Document文档
ES中的最小数据单元。一个Document就是一条数据,一般使用JSON数据结构表示。
每个Index下的Type中都可以存储多个Document。一个Document中有多个field,field就是数据字段。如:
product document
{
"product_id":1,
"product_name":"xxx",
.....
}
Index索引
包含若干相似结构的Document数据。
如:客户索引,订单索引,商品索引等。一个Index包含多个Document,也代表一类相似的或相同的Document。
如:订单索引中存放了所有的订单数据(就是所有的订单Document)
Type类型
每个索引中都可以有若干Type,Type是Index中的一个逻辑分类,同一个Type中的Document都有相同的field。
示例:订单索引,不同状态的订单包含不同的内容,如:未支付订单(自动取消时间)和已支付订单(支付时间)、已发货订单(发货时间、物流信息)等都有不同的内容。
ES6.x版本之后,type概念被弱化,一个index中只能有唯一的一个type。且在7.x版本之后,会删除type定义
shard
一个index默认10个shard,5个primary shard(主分片),5个replica shard(副本分片)。
最小的高可用配置需要2台服务器。因为ES要求primary shard和replica shard不能处于同一个节点中;
对比数据库理解
Search
- 使用Postman测试
查看健康的状态
GET /_cat/health?v
status:green、yellow、red
green:每个索引的primary shard和replica shard都是active的
yellow:每个索引的primary shard都是active的,但部分的replica shard不是active的
red:不是所有的索引都是primary shard都是active状态的。
展示所有的索引
GET /_cat/indices?v