ElasticSearch实战(一)

释放双眼,带上耳机,听听看~!

首先看要实现的功能,如下图:

ElasticSearch实战(一)

<1>  支持模糊查询
<2> 支持查询匹配的关键字高亮显示
<3> 支持点赞功能,即修改文档
<4> 支持查询结果分页
<5> 支持指定字段精确匹配;支持日期和数值类的范围查询

下面用ElasticSearch(以下简称ES)一一实现上述功能。

准备工作一、搭建ElasticSearch Windows测试环境

下载

因SpringBoot的starter还不支持最新版的ES,这里使用6.5.4版本

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.zip

下载后解压缩,并执行bin/elasticsearch.bat即可启动ES

用浏览器打开 http://localhost:9200/ 如无意外,可看到类似以下信息


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1{
2  &quot;name&quot; : &quot;sRdVRrd&quot;,
3  &quot;cluster_name&quot; : &quot;elasticsearch&quot;,
4  &quot;cluster_uuid&quot; : &quot;HRu5vExrQo6L_OkTtCb8eQ&quot;,
5  &quot;version&quot; : {
6    &quot;number&quot; : &quot;6.5.4&quot;,
7    &quot;build_flavor&quot; : &quot;default&quot;,
8    &quot;build_type&quot; : &quot;zip&quot;,
9    &quot;build_hash&quot; : &quot;d2ef93d&quot;,
10    &quot;build_date&quot; : &quot;2018-12-17T21:17:40.758843Z&quot;,
11    &quot;build_snapshot&quot; : false,
12    &quot;lucene_version&quot; : &quot;7.5.0&quot;,
13    &quot;minimum_wire_compatibility_version&quot; : &quot;5.6.0&quot;,
14    &quot;minimum_index_compatibility_version&quot; : &quot;5.0.0&quot;
15  },
16  &quot;tagline&quot; : &quot;You Know, for Search&quot;
17}
18

** 准备工作二、创建一个SpringBoot Web应用**

依赖


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1&lt;dependencies&gt;
2        &lt;dependency&gt;
3            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
4            &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
5            &lt;exclusions&gt;
6                &lt;exclusion&gt;
7                    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
8                    &lt;artifactId&gt;spring-boot-starter-logging&lt;/artifactId&gt;
9                &lt;/exclusion&gt;
10            &lt;/exclusions&gt;
11        &lt;/dependency&gt;
12        &lt;dependency&gt;
13            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
14            &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt;
15        &lt;/dependency&gt;
16        &lt;dependency&gt;
17            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
18            &lt;artifactId&gt;spring-boot-starter-thymeleaf&lt;/artifactId&gt;
19        &lt;/dependency&gt;
20
21        &lt;dependency&gt;
22            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
23            &lt;artifactId&gt;spring-boot-starter-data-elasticsearch&lt;/artifactId&gt;
24        &lt;/dependency&gt;
25        &lt;!-- https://mvnrepository.com/artifact/com.querydsl/querydsl-core --&gt;
26        &lt;dependency&gt;
27            &lt;groupId&gt;com.querydsl&lt;/groupId&gt;
28            &lt;artifactId&gt;querydsl-core&lt;/artifactId&gt;
29            &lt;version&gt;4.2.1&lt;/version&gt;
30        &lt;/dependency&gt;
31
32        &lt;dependency&gt;
33            &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
34            &lt;artifactId&gt;fastjson&lt;/artifactId&gt;
35            &lt;version&gt;1.2.58&lt;/version&gt;
36        &lt;/dependency&gt;
37        &lt;dependency&gt;
38            &lt;groupId&gt;org.apache.commons&lt;/groupId&gt;
39            &lt;artifactId&gt;commons-lang3&lt;/artifactId&gt;
40            &lt;version&gt;3.1&lt;/version&gt;
41            &lt;optional&gt;true&lt;/optional&gt;
42        &lt;/dependency&gt;
43
44        &lt;dependency&gt;
45            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
46            &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
47            &lt;scope&gt;test&lt;/scope&gt;
48        &lt;/dependency&gt;
49    &lt;/dependencies&gt;
50

application.yml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1spring:
2  data:
3    elasticsearch:
4      cluster-name: elasticsearch
5      cluster-nodes: 127.0.0.1:9300
6      repositories:
7        enabled: true
8  thymeleaf:
9    prefix: classpath:/templates/
10    suffix: .html
11    mode: HTML
12    encoding: UTF-8
13    cache: false
14

 接下来创建一个用于保存和展示数据的JavaBean,本例中模拟Blog的形式,属性包括作者、内容、发布时间及点赞数,如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1import java.util.Date;
2import org.springframework.data.elasticsearch.annotations.Document;
3
4@Document(indexName = &quot;website&quot;, type = &quot;blog&quot;)
5public class Blog {
6
7    private int id;
8    private String author;
9    private String text;
10    private int likes;
11    private Date date;
12
13    public Blog() {
14    }
15
16    public Blog(int id, String author, String text, int likes, Date date) {
17        this.id = id;
18        this.author = author;
19        this.text = text;
20        this.likes = likes;
21        this.date = date;
22    }
23
24    //getter/setter略
25

注意注解@Document是必须的。

测试:写入一条"Blog"并读取出来


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1    @Autowired
2    private ElasticsearchTemplate elasticsearchTemplate;
3
4    @Test
5    public void contextLoads() {
6        Blog blog1 = new Blog(1, &quot;Mary Jones&quot;, &quot;Jane is an expert in her field&quot;, 0, new Date());
7        IndexQuery indexQuery = new IndexQueryBuilder().withObject(blog1).build();
8        elasticsearchTemplate.index(indexQuery);
9
10        GetQuery getQuery = new GetQuery();
11        getQuery.setId(&quot;1&quot;);
12        Blog blog2 = elasticsearchTemplate.queryForObject(getQuery, Blog.class);
13        System.out.println(ToStringBuilder.reflectionToString(blog2));
14    }
15

 

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索