ES基本入门操作与SpringBoot整合

Posted by Futari on 2022-02-22
Estimated Reading Time 4 Minutes
Words 1k In Total
Viewed Times

ES:分布式全文搜索引擎

windiows安装之后运行bat批处理文件执行

ES没有数据库的概念,但是有索引的概念

启动Es后,直接对ES发请求,在请求路径之后跟上索引(http://localhost:9200/books),ES全面支持Restful风格的操作

1
2
3
4
5
6

PUT:返回boolean类型的Json数据,字段有acknowledged(操作是否成功),index(你提交的索引名)

GET:返回索引的json数据

DELETE:直接加索引删除

PS:注意索引是不允许重复的,所以不能发起两次put请求,不然报错

想要创建的索引具有分词效果,因该对索引添加分词器(加入到索引的mappings的属性中),解压后放到ES安装目录的plugins插件目录下

直接在创建索引时,将mappings的json格式的数据从请求体的raw中通过Put请求提交

参考格式:(指定每一个属性的检索策略)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"mappings":{
"properties":{
"id":{
"type":"keyword"
},
"name":{
"type":"text",
"analyzer":"ik_max_word"
//name字段参与分词
可以设定"copy_to"属性将多属性进行合并检索
}
}
}
}

添加索引的文档,在索引后加/_doc代表添加该索引的文档,另外还有__create,需要制定id,如果不指定id那么会自动分配id

一个索引可以有多个文档,指定文档的id可以在文档后面再加一个斜杠和数字来指定,直接在请求体中添加id是不生效的

get方法必须添加id,不然让ES以为你是post请求,报405错误

也可以查全部,直接使用_search

按内容进行条件查询:

类似于:http://localhost:9200/books/_search?q=name:spring

上面按name的值进行查询

修改文档:PUT全量修改,传入完整的请求体

POST部分修改:指定id,传入doc(确定类型)和要修改的属性即可

ES整合SpringBoot

加入maven依赖,注意使用高版本的依赖(elasticsearch-rest-high-level-client)而不是低版本的ES

高版本的ES不支持自动注入,所以需要手动去创建客户端对象,调用ES对象的方法手动操作,手动关闭close客户端client

通过ES对象的方法和属性的设置,来创建修改索引和文档(数据),一般请求中的就使用对象方法,请求体中的就通过设置属性添加

这里可以将数据库中的实体类数据通过fastjson转换为json,直接将数据传入

添加完fastjson依赖后,调用JSON.toJSONString方法,参数为对象,将对象转换为json,一般SpringBoot会自动转换为Json,因为是手动的所以要手动用fastJSON转换

BulkRequest可以创建一个批处理的请求对象,将该对象传入client.bulk方法中,并且加上请求参数来批处理添加文档,

PS:单个文档需要创建IndexRequest对象之后,传入json数据和类型参数后经client发起请求
下面是普通按id查询的代码,直接将request对象传入client的获取响应的方法中并且带上请求的默认参数,获得响应输出即可
1
2
3
4
5
6
7
@Test
//按id查询
void testGet() throws IOException {
GetRequest request = new GetRequest("books","1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
String json = response.getSourceAsString();
System.out.println(json);
将json转换为对象,调用JSON.parseObject(json数据,转换成的目标类型.class)

按条件查询的编码方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  @Test
//按条件查询
void testSearch() throws IOException {
SearchRequest request = new SearchRequest("books");
//先创建request对象,下面为它添加builder条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.termQuery("all","spring"));
request.source(builder);
//使用client进行操作得到响应
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//对response进行解析输出
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
//getResource的resource是文档的属性,ES文档的属性都是默认的,以_加上名称,如_resouce,_index(索引)
String source = hit.getSourceAsString();
//System.out.println(source);
Book book = JSON.parseObject(source, Book.class);
System.out.println(book);
}

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !