当前位置:   article > 正文

Springboot 操作 elasticsearch_spring boot读取elasticsearch: host:

spring boot读取elasticsearch: host:

Springboot 操作 elasticsearch

一、es 6.8版本

使用高级客户端

pom.xml

 		<!-- ES 客户端 -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.8.22</version>
        </dependency>
        <!-- ES 版本 -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.8.22</version>
        </dependency
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

application.yml

elasticsearch:
  host: 10.0.1.192:9200,10.0.1.192:9300
  • 1
  • 2

config.java

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;

@Configuration
public class EsConfig {
    @Value("${elasticsearch.host}")
    private String hostlist; // 127.0.0.1:9200

    @Bean // 高版本客户端
    public RestHighLevelClient restHighLevelClient() {
        // 解析 host 配置信息。假如以后有多个,则需要用 , 分开
        String[] split = hostlist.split(",");
        // 创建 HttpHost 数组,其中存放es主机和端口的配置信息
        HttpHost[] httpHostArray = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String item = split[i];
            httpHostArray[i] = new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http");
        }
        // 创建RestHighLevelClient客户端
        return new RestHighLevelClient(RestClient.builder(httpHostArray));
    }

    // 项目主要使用 RestHighLevelClient,对于低级的客户端暂时不用
    @Bean
    public RestClient restClient() {
        // 解析host配置信息
        String[] split = hostlist.split(",");
        // 创建HttpHost数组,其中存放es主机和端口的配置信息
        HttpHost[] httpHostArray = new HttpHost[split.length];
        for (int i = 0; i < split.length; i++) {
            String item = split[i];
            httpHostArray[i] = new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http");
        }
        return RestClient.builder(httpHostArray).build();
    }
}
  • 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

service接口

public interface AwGoodsService {
    public void getAll() ;
}
  • 1
  • 2
  • 3

1、范围查询rangeQuery

实现类

public class AwGoodsServiceImpl implements AwGoodsService {

    @Autowired
    private RestHighLevelClient client;

    @Override
    public void getAll() {

        //创建查询请求
        SearchRequest searchRequest = new SearchRequest("goods");

        //查询条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //创建范围查询
        RangeQueryBuilder rang = QueryBuilders.rangeQuery("crawl_time").gte("2023-03-08 09:25:31").lte("2023-03-09 07:40:58");
        //设置范围查询
        searchSourceBuilder.query(rang);
        //设置查询结果降序
        searchSourceBuilder.sort("crawl_time", SortOrder.DESC);
        //设置查询主体
        searchRequest.source(searchSourceBuilder);
        //执行查询
        SearchResponse response = null;
        try {
            response = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println(response);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //获取结果
        SearchHits hits = response.getHits();
        List<AwGoodsDo> all = new ArrayList<>();
        SearchHit[] smallHits = hits.getHits();
        for (SearchHit smallHit : smallHits) {
            String sourceAsString = smallHit.getSourceAsString();
            AwGoodsDo awGoodsDo= JSON.parseObject(sourceAsString, AwGoodsDo.class);
            all.add(awGoodsDo);
        }
        System.out.println("111111"+all.get(0).toString());
        System.out.println("!!!!!"+all.toString());
    }


}

  • 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

注意:

执行不同语句是不同api 比如SearchXX、GetXX、CreateXX等等

2、精确查询termQuery

//describe字段中含有特价的查询出来 
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("describe", "特价"));
或者
TermQueryBuilder term = QueryBuilders.termQuery("describe", "特价"));
searchSourceBuilder.query(term)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

注意

不同查询就是构建不同XXQuery

searchSourceBuilder.query(XXQuery)

学习于https://maimai.cn/article/detail?fid=1744761944&efid=4C4zcI79tmI0h5aTGq_LRA

二、es 7.0以上

推荐使用easy-es 类似于mybatis plus 操作MySQL数据库

<!-- 引入easy-es的依赖,类似与mybatis plus操作es-->
        <dependency>
            <groupId>cn.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>elasticsearch-rest-high-level-client</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.14.0</version>
        </dependency>
  • 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

application.yaml

easy-es:
  address: 10.0.1.192:9200,10.0.1.192:9300 # es连接地址+端口 格式必须为ip:port,如果是集群则可用逗号隔开
  keep-alive-millis: 30000 # 心跳策略时间 单位:ms
  connect-timeout: 5000 # 连接超时时间 单位:ms
  socket-timeout: 600000 # 通信超时时间 单位:ms
  request-timeout: 5000 # 请求超时时间 单位:ms
  connection-request-timeout: 5000 # 连接请求超时时间 单位:ms
  max-conn-total: 100 # 最大连接数 单位:个
  max-conn-per-route: 100 # 最大连接路由数 单位:个
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

实体

@Data
@AllArgsConstructor
@NoArgsConstructor
@IndexName(value = "user",keepGlobalPrefix = true) //索引名
public class UserDo {
    //es的id(_id)
    //IdType.NONE: 由ES自动生成,是默认缺省时的配置,无需您额外配置 推荐
    //IdType.UUID: 系统生成UUID,然后插入ES (不推荐)
    //IdType.CUSTOMIZE: 由用户自定义,用户自己对id值进行set,如果用户指定的id在es中不存在,则在insert时就会新增一条记录,如果		用户指定的id在es中已存在记录,则自动更新该id对应的记录
    //实体类中被作为ES主键的字段
    @IndexId
    private String id;

    //es 对应的字段名 字段类型
    @IndexField(value = "user_name" ,fieldType = FieldType.KEYWORD)
    private String userName;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

mapper

public interface UserMapper extends BaseEsMapper< UserDo> {
}
  • 1
  • 2

启动类扫描

@EsMapperScan(包路径)
  • 1

service接口

public interface UserService {
}
  • 1
  • 2

service实现类

@Service
public class UserServiceImpl implementsUserService {
    @Autowired
    private UserMapper userMapper;

    //查询创建时间(create_time)在某个时间段的数据,方法传入起止时间和结束时间字符串
    public List<UserDo> getAllByInterval(String startDate, String endDate) {
        LambdaEsQueryWrapper<UserDo> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.ge("create_time_time",startDate);
        wrapper.le("create_time_time",endDate);
        List<UserDo> all = userMapper.selectList(wrapper);
        return all;
    }
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

注意:复杂的查询语句通过Wrapper构建

easy-es官网https://www.easy-es.cn/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/68427?site
推荐阅读
相关标签
  

闽ICP备14008679号