全文搜索属于最常见的需求, 开源的Elasticsearch是全文检索的首选;
Elasticsearch可以快速的存储 搜索和分析海量的数据,很多大型的软件都在使用;它的底层是开源库Lucene,但是需要使用接口调用,Elastic是Lucene的封装,提供了REST API 的操作接口.是基于Lucene的搜索服务器.
隐藏Lucene的复杂性
Node: Elastic本质上是分布式数据库,允许多台服务器协同工作,每台服务器,可以运行多个Elastic
单个Elastic实例称为一个节点,一组节点构成一个集群,
Cluster: es可以运行在多个服务器上,这些服务器的集合被称为集群
Shard: 将数据分为较小的分片,将各个分片储存在不同的服务器上;
Replia: 副本是分片的精准复制,分片可以有多个副本,也可以没有,可以被更改索引的分片被称为主分片;
Index: Elastic会索引所有的字段,经过处理后写入下一个反向的索引( Inverted Index).Elastic数据管理的顶层单位就叫做Index(索引)他是单个数据库的同义词,每个Index的名字必须小写;
Document: Index里的单条记录被称之为Document(文档),多个Document构成一个Index,Document使用JSON格式;不要求格式相同;
Type: Document可以分组,这种虚拟的逻辑分组就叫Type,用来过滤Document,6.x版本只允许每个Index只能有一个Type,7.x版本会彻底删除Type;
acknowledged字段表示操作成功;
中文的插件是ik(也可以考虑smartcn)
解决的主要问题:检索相关数据,返回统计结果,速度快
特点和优势:
- 分布式实时文件存储,可将每个字段存入索引,使其可以被索引到,
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据
- 支持插件机制,分词插件,同步插件,Hadoop插件,可视化插件等
#创建索引并添加映射 PUT /person1 { "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } } } GET person1/_mapping
#添加字段 PUT /person1/_mapping { "properties": { "name": { "type": "text" }, "age": { "type": "integer" } } }
•添加文档,指定id ```json POST /person1/_doc/2 { "name":"张三", "age":18, "address":"北京" } GET /person1/_doc/1 ``` •添加文档,不指定id ```json #添加文档,不指定id POST /person1/_doc/ { "name":"张三", "age":18, "address":"北京" } #查询所有文档 GET /person1/_search
创建索引,添加映射,并指定分词器为ik分词器 ```json PUT person2 { "mappings": { "properties": { "name": { "type": "keyword" }, "address": { "type": "text", "analyzer": "ik_max_word" } } } }
2.添加文档 ``` POST /person2/_doc/1 { "name":"张三", "age":18, "address":"北京海淀区" }