SprinBoot 系列文章:
Spring Boot入门之Hello Spring Boot
SpringBoot 配置多个JdbcTemplate
SpringBoot 整合Mybatis
CAS统一登录认证(3): CAS 客户端接入实践
SpringBoot 整合Mail实现邮件发送
数据库连接池优化配置(druid,dbcp,c3p0)
SpringBoot+SpringSecurity+mysql实现认证与授权
SpringBoot+Spring Security基于内存用户认证
SpringBoot+WebSocket在线聊天室、消息推送
SpringBoot+SpringData JPA操作Mysql数据库
SpringBoot热部署值devtools配置
Spring Boot 资源文件属性配置
Spring Boot Server等内容的配置
Spring Boot + FreeMarker模板
SpringBoot+thymeleaf模板
SpringBoot +JDBC连接Mysql数据库
Zipkin分布式任务追踪
SpringBoot应用部署到外置Tomcat
Spring Boot + Swagger2 自动生成api接口文档
SpringBoot整合Shiro安全框架
SpringBoot+CAS Client 实现单点登录
SpringBoot 整合MyBatis-Plus
SpringBoot + validation 接口参数校验
Springboot+Redis 实现API接口防刷限流
ShardingSphere-ShardingJdbc 数据分片(分库、分表)
ShardingSphere-ShardingJdbc 读写分离
ShardingSphere-ShardingJdbc 数据脱敏
springboot+sms 集成腾讯云短信平台
SpringBoot+RabbitMQ 实现消息队列
快速从零搭建一个SpringBoot Web项目
从零快速搭建一个SpringBoot Web项目
SpringBoot+ElasticSearch 实现全文检索
访问ElasticSearch的几种方式
SpringBoot + Activiti 工作流引擎(一、基本概念与环境搭建)
SpringBoot + Activiti 工作流引擎(二、流程&任务操作)
SpringBoot 定时任务 实现方式
SpringBoot + EhCache实现本地缓存
SpringBoot + Redis 实现分布式缓存
访问ElasticSearch的几种方式:
- REST API
- 开源工具(Kibana、Head等)
- Spring Data Elasticsearch(应用程序使用接口访问或者开源框架)
一、RestAPI
1. 查看集群健康情况
GET /_cat/health?v
get:http://localhost:9200/_cat/health?v
2.查看有哪些索引
GET /_cat/indices?v
GET /_cat/indices
get:http://localhost:9200/_cat/indices?v
3. 创建索引
put:http://localhost:9200/blogindex
4.删除索引
delete: http://localhost:9200/blogindex
5.创建文档
post:http://localhost:9200/blogindex/blog
或者指定id(存在则类型为修改):http://localhost:9200/blogindex/blog/1
+内容:
{
"title":"我的第一篇博客",
"content":"博客正文123456"
}
6.修改文档
put:http://localhost:9200/blogindex/blog/1
+内容:
{
"title":"我的第一篇博客",
"content":"博客正文123456"
}
7.获取所有文档
get: http://localhost:9200/blogindex/_search
或者:http://localhost:9200/blogindex/blog/_search
8.按id查询文档
get: http://localhost:9200/blogindex/blog/1
9.基本条件查询文档
get: http://localhost:9200/blogindex/blog/_search?q=title:我的
10.模糊匹配查询
get:http://localhost:9200/blogindex/blog/_search?q=title:h*
11.删除文档
delete: http://localhost:9200/blogindex/blog/1
二、开源工具(Kibana、Head等)
1.查看所有索引
GET /_search 或者 GET _search 或者 GET /_search?timeout=01m
参数说明:
- took:耗费了几毫秒
- timed_out:是否超时,false是没有,默认无timeout
- _shards:shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shard上去,当然了,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。
- hits.total:本次搜索,返回了几条结果
- hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
- hits.hits:包含了匹配搜索的document的详细数据,默认查询前10条数据,按_score降序排序
2.创建索引
PUT /kibana_blog_index
3.删除索引
DELETE /kibana_blog_index
4.创建文档
POST /kibana_blog_index/blog/1
{
"tiitle": "springboot入门第一课",
"content": "springboot入门第一课content",
"star":1,
"recommend": 1
}
5.按id查询文档
GET /kibana_blog_index/blog/1
6.修改文档
6.1 覆盖,替换文档(全量替换)
POST或者PUT
PUT /kibana_blog_index/blog/1
{
"tiitle": "springboot入门第一课111",
"content": "springboot入门第一课content111",
"star":11,
"recommend": 1
}
** 注意:**
- document是不可变的,如果要修改document的内容,可以通过全量替换,直接对document重新建立索引,替换里面所有的内容。
- es会将老的document标记为deleted(逻辑删除),然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除(物理删除)标记为deleted的document。
- 替换必须带上所有的field,否则其他数据会丢失。
6.2 修改部分内容
POST /kibana_blog_index/blog/1/_update
{
"doc" : {
"title": "springboot入门第一课1"
}
}
7.获取所有文档
GET /kibana_blog_index/blog/_search
# 或者 使用query DSL 请求:
GET /kibana_blog_index/blog/_search
{
"query":{
"match_all" : {
}
}
8.基本条件查询文档
8.1 基本查询
GET /kibana_blog_index/blog/_search?q=title:1*
8.2 使用query DSL 请求查询
8.2.1 使用query DSL 请求查询
GET /kibana_blog_index/blog/_search
{
"query" : {
"match_all" : {
}
}
}
8.2.2 查询title包含第一的博客,同时按照star升序排列
GET /kibana_blog_index/blog/_search
{
"query" : {
"match" : {
"title" : "第一"
}
},
"sort" : [
{
"star" : "asc"}
]
}
8.2.3 分页查询,同时按照star降序排列
GET /kibana_blog_index/blog/_search
{
"from" : 1,
"size" : 3,
"sort" : [
{
"star" : "desc"}
]
}
8.2.4 指定查询项
GET /kibana_blog_index/blog/_search
{
"query" : {
"match_all" : {
}},
"_source" : ["title", "star"]
}
8.2.5 过滤查询,搜索title包含第一且star大于3的blog
GET /kibana_blog_index/blog/_search
{
"query" : {
"bool" : {
"filter" : {
"range" : {
"star": {
"gt" : 3}
}
}
}
}
}
8.2.6 full-text search(全文检索)
GET /kibana_blog_index/blog/_search
{
"query" : {
"match" : {
"title": "springboot入门第五课5"
}
}
}
8.2.7 phrase search(短语搜索)
GET /kibana_blog_index/blog/_search
{
"query" : {
"match_phrase" : {
"title" : "第五课"
}
}
}
8.2.8 多条件查询
#title有"第五",star为5,recommond 不为0
GET /kibana_blog_index/blog/_search
{
"query" : {
"bool" : {
"must" : [
{
"match_phrase" : {
"title" : "第五"
}
}
],
"should" : [
{
"match" : {
"star" : 5
}
}
],
"must_not" : [
{
"match" : {
"recommond":0
}
}
],
"minimum_should_match" : 1
}
}
}
两种请求分类:query string search / query DSL
- 第一种:类似搜索全部商品: GET /ecommerce/product/_search (参数直接拼接在请求上,不带json参数的)query string search的由来,因为search参数都是以http请求的query string来附带的。
搜索商品名称中包含yagao的商品,而且按照售价降序排列:GET /ecommerce/product/_search?q=name:yagao&sort=price:desc 适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;但是如果查询请求很复杂,是很难去构建的,所以在生产环境中,几乎很少使用query string search。- 第二种:DSL:Domain Specified Language,特定领域的语言 http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大太多了。
full-text search (全文检索)和 phrase search(短语搜索)的区别:
全文检索: 会将输入的搜索串拆解开来,去索引里面去一一匹配,只要能匹配任意一个拆解后的单词,就可以作为结果返回。
短语搜索: 要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配成功,才能作为结果返回。
多条件查询中的字段描述:
- must 表示一定要满足;
- should 表示可以满足也可以不满足;
- must_not 表示不能满足该条件;
- minimum_should_match:1 表示最小匹配度,可以设置为百分之百,设置了这个值的时候就必须满足should里面的设置了,另外注意这边should里面同一字段设置的多个值,意思是当这个值等于X或者等于Y都成立,务必注意格式。
9.删除文档
DELETE /kibana_blog_index/blog/1
注意:在删除一个document之后,我们可以从侧面证明,它不是立即物理删除的,因为它的一些版本号信息还是保留的。
三、SpringBoot整合ElasticSearch
请参考:https://blog.csdn.net/u014553029/article/details/110506316