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字段查到数据。
