赞
踩
使用高级客户端
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
application.yml
elasticsearch:
host: 10.0.1.192:9200,10.0.1.192:9300
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(); } }
service接口
public interface AwGoodsService {
public void getAll() ;
}
实现类
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()); } }
注意:
执行不同语句是不同api 比如SearchXX、GetXX、CreateXX等等
//describe字段中含有特价的查询出来
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("describe", "特价"));
或者
TermQueryBuilder term = QueryBuilders.termQuery("describe", "特价"));
searchSourceBuilder.query(term)
注意:
不同查询就是构建不同XXQuery
searchSourceBuilder.query(XXQuery)
学习于https://maimai.cn/article/detail?fid=1744761944&efid=4C4zcI79tmI0h5aTGq_LRA
推荐使用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>
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 # 最大连接路由数 单位:个
实体
@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; }
mapper
public interface UserMapper extends BaseEsMapper< UserDo> {
}
启动类扫描
@EsMapperScan(包路径)
service接口
public interface UserService {
}
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; } }
注意:复杂的查询语句通过Wrapper构建
easy-es官网https://www.easy-es.cn/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。