ElasticSearch简介
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
ElasticSearch对比MySQL
ELasticSearch | MySQL |
---|---|
index | database |
type | table |
document | row |
field | column |
RESTful
RESTful中文意思是表现层状态转化。
在RESTful架构中:每一个URI代表一种资源;客户端和服务器之间,传递这种资源的某种表现层;客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。通过URI指定资源,如Index,Document
等。通过Http Method
指明资源操作类型,如GET POST PUT DELETE
等。
索引创建
使用postman工具创建一个名为shopping
的索引,请求方式为PUT
索引查询
获取单个索引信息
获取全部索引信息
请求地址后面添加_cat/indices?v
索引删除
删除名为shopping
的索引,请求方式为DELETE
创建文档
请求方式为POST
,请求地址为http://localhost:9200/索引名/_doc
,请求体为JSON
格式
由于ES自动生成的id
不便于记忆,因此我们可以自定义id,只需要在_doc
后写入自定义的id即可
查询文档
只需要将创建文档的请求方式改为GET
即可,其中_doc
后面的1001
相当于主键
获取索引下的所有数据,可以在请求的索引后加_search
修改索引下的数据
全量更新
因为全量更新的请求是满足幂等条件的,因此请求方式为PUT
,将需要修改的内容以JSON
格式写入请求体
局部更新
局部更新的请求不满足幂等条件,因此请求方式为POST
,而且因为是局部更新,因此索引名后面要写_update
而不能写_doc
删除数据
资源地址和创建时是一样的,请求方式变为DELETE
条件查询
请求路径查询
请求方式为GET
,请求路径为http://localhost:9200/shopping/_search?q=category:iphone13
该请求路径表示查询shopping索引下category=iphone13
的所有结果
请求体查询
请求体查询在请求路径只需要输入http://localhost:9200/shopping/_search
,在请求体中添加JSON
查询请求如下
1 | { |
如果要全量查询,只需要将请求体中的match
改为match_all
即可
分页查询
全量查询的话数据量会很大,因此我们可以采用分页查询
请求体中添加JSON
如下,其中from
表示从哪一页开始,0表示第一页。size表示页的大小,即每一页有多少条数据。
1 | { |
查询结果数据源控制
在请求体中添加JSON
请求查询如下,其中_source
表示所要展示的数据源,这里我们设置只显示title
字段
1 | { |
查询结果排序
在请求体中添加JSON
请求查询如下,其中sort
表示所要要对数据进行排序,这里我们设置按照价格进行降序排序,
1 | { |
多条件查询
多条件同时成立
请求体如下,其中bool
代表条件查询,must
表示多个条件必须同时成立
1 | { |
多条件任意成立
请求体如下,其中bool
代表条件查询,should
表示多个条件任意成立一个都行,这个时候我们会同时查出价格为5999和7999的结果
1 | { |
范围查询
请求体如下,其中filter
表示过滤,range
表示范围,我们选择price
大于6000作为条件。
1 | { |
完全匹配
ES在进行匹配查询的时候,会对文字进行插词之后倒排索引,因此对于category=华为
来讲,我们在match
匹配的时候只写一个华或是一个为,ES都会匹配出category=华为
的结果。如果我们需要完全匹配的话,需要将match
改为match_phrase
高亮查询
请求体如下,这里我们的匹配规则是category=iphone13
,并对category
字段进行高亮处理
1 | { |
映射关系
创建一个索引映射
首先创建一个test
索引
创建索引的结构信息
请求路径为http://localhost:9200/test/_mapping
,请求方式为PUT
,请求体如下,其中properties
表示属性设置,type=text
表示name
可以分词处理,index=true
表示name
可以被索引查询,type=keyword
表示sex
不可以分词处理,必须完整匹配。
1 | { |
增加数据
查询数据
因为我们的name
设置的是可以分词,因此我们在查询的时候对于name
只匹配一个字也可以查询出来结果。
对于sex
因为我们设置的是keyword
,因此不可以分词查询。必须完全匹配。
而对于tel
字段,因为index
为false
,即不可以通过索引进行查询,因此我们无法根据tel
字段查到数据。