Spring Boot集成ES demo

Spring Boot集成ES demo

基础配置

配置 RestHighLevelClient client 对象,进行增删改查。

依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.24</version>
        </dependency>

配置

elasticsearch:
  host: 127.0.0.1
  port: 9200

配置类

config/EsConfig.java

package com.ppl.esdemo.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author ppliang
 * @title: ESConfig
 * @projectName es-demo2
 * @description: ES 配置类
 * @date 2021-09-13 16:52
 */
@Configuration
public class EsConfig {

    @Value("${elasticsearch.host}")
    private String host;

    @Value("${elasticsearch.port}")
    private int port;

    @Bean
    public RestHighLevelClient client(){
        return new RestHighLevelClient(RestClient.builder(
                new HttpHost(host,port,"http")
        ));
    }
}

操作服务

简易逻辑:

查询条件—>查询结果---->遍历----->获取json对象----->转成类对象–>是否修改存入es

对象id 通过md5创建唯一id 通过id进行增删改

问题一:类中属性与ES中的属性名称不匹配。在属性,或get,set方法上使用注解@JSONField

Fastjson 简明教程 | 菜鸟教程 (runoob.com)

问题二:keyword字段的查询(注意是否需要 .keyword 后缀)

  • 字段 trem value 精确查询
  • 字段 wild *value* 模糊查询

按照01-02操作文档:edge 安装插件: Elasticvue

在这里插入图片描述

创建bean.es.Twitter.java

package com.ppl.esdemo.bean.es;

/**
 * @author ppliang
 * @title: Twitter
 * @projectName es-demo2
 * @description: ES 表
 * @date 2021-09-13 17:08
 */
public class Twitter {

    private String authorId;

    private String authorName;

    private String message;

    private Long createdAt;

    public String getAuthorId() {
        return authorId;
    }

    public void setAuthorId(String authorId) {
        this.authorId = authorId;
    }

    public String getAuthorName() {
        return authorName;
    }

    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Long getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Long createdAt) {
        this.createdAt = createdAt;
    }

    @Override
    public String toString() {
        return "Twitter{" +
                "authorId='" + authorId + '\'' +
                ", authorName='" + authorName + '\'' +
                ", message='" + message + '\'' +
                ", createdAt=" + createdAt +
                '}';
    }
}

创建服务 TwitterServiceImpl.java

/**
 * @author ppliang
 * @title: TwitterServiceImpl
 * @projectName es-demo2
 * @description: Twitter 增删改查
 * @date 2021-09-14 10:13
 */
@Service
public class TwitterServiceImpl implements TwitterService {

    @Autowired
    private RestHighLevelClient client;

    @Override
    public boolean addOne(Twitter _twitter) throws IOException {

        IndexRequest request = new IndexRequest("twitter");
        request.id(DigestUtils.md5Hex(_twitter.toString()));
        request.source(JSON.toJSONString(_twitter), XContentType.JSON);

        IndexResponse index = client.index(request, RequestOptions.DEFAULT);

        return true;
    }

    @Override
    public List<Twitter> select() throws IOException {
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //TODO  增加查询条件


        SearchRequest request = new SearchRequest("twitter");
        sourceBuilder.query(boolQueryBuilder);
        request.source(sourceBuilder);

        SearchResponse search = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();

        //总数量
        long value = hits.getTotalHits().value;
        SearchHit[] restHits = hits.getHits();
        ArrayList<Twitter> list = new ArrayList<>();
        for (SearchHit restHit : restHits) {
            //查询到的对象
            Twitter twitter = JSON.parseObject(restHit.getSourceAsString(), Twitter.class);
            list.add(twitter);
        }
        return list;
    }

    @Override
    public boolean updateOne(Twitter _twitter) throws IOException {
        String id=DigestUtils.md5Hex(_twitter.toString());
        UpdateRequest updateRequest = new UpdateRequest("twitter",id);

        updateRequest.doc(JSON.toJSONString(_twitter));

        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);

        return false;
    }

    @Override
    public boolean deleteOne(Twitter _twitter) throws IOException {
        String id=DigestUtils.md5Hex(_twitter.toString());
        DeleteRequest deleteRequest = new DeleteRequest("twitter", id);

        DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
        return false;
    }
}

查询条件

    boolQueryBuilder.must(QueryBuilders.termQuery(,));
    boolQueryBuilder.should(QueryBuilders.termQuery(, ));
    boolQueryBuilder.mustNot(QueryBuilders.termQuery(,));

	termQuery("fileName",value)//term 全等
    termsQuery("fileName", String... values)//trem in 属于
    
    wildcardQuery("fileName",value) //模糊查询  通配符检索 性能较差
    
    rangeQuery("fileName").gte(begin).lte(end);// 范围查询

	sourceBuilder.sort("fileName", SortOrder.DESC); //排序 desc 逆序 asc 顺序 默认顺序
    sourceBuilder.sort("fileName", SortOrder.ASC); 

	sourceBuilder.from(0).size(10); //从0开始 取10结果
    
            

转成查询语句:

ES 21 - Elasticsearch的高级检索语法 (包括term、prefix、wildcard、fuzzy、boost等) - 爱码网 (likecs.com)

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "author_name": "Edgar"
                    }
                }
            ],
            "must_not": [],
            "should": []
        }
    },
    "from": 0,
    "size": 10,
    "sort": [],
    "aggs": {}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值