ElasticSearch

本文介绍了如何使用Java与Elasticsearch进行交互,包括配置RestHighLevelClient进行ES操作,构建SearchRequest和SearchSourceBuilder以设定检索参数,利用QueryBuilders创建查询子句,并详细讲解了如何解析和封装返回结果。
摘要由CSDN通过智能技术生成

1、Java操作ES

配置ES

@Configuration
public class GulimallElasticSearchConfig {
   
    public static final RequestOptions COMMON_OPTIONS;
    //RequestOptions可以配置一些请求头的,这里不设置
    static {
   
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        // builder.addHeader("Authorization", "Bearer " + TOKEN);
        // builder.setHttpAsyncResponseConsumerFactory(
        //         new HttpAsyncResponseConsumerFactory
        //                 .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }

    @Bean
    public RestHighLevelClient esRestClient(){
   
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("192.168.56.101", 9200, "http")));
        return  client;
    }
}

①、创建RestHighLevelClient,每次操作都是RestHighLevelClient操作ES,restHighLevelClient.search(SearchRequest searchRequest, RequestOptions options)
②、创建SearchRequest (索引请求),将检索参数封装成请求
③、创建SearchSourceBuilder,构建检索语句
④、创建QueryBuilders,构建每一个子语句
⑤、将返回的数据封装,result = buildSearchResult(response, Param);

@Override
	public SearchResult search(SearchParam Param) {
   

		SearchResult result = null;
		// 1.准备检索请求
		SearchRequest searchRequest = buildSearchRequest(Param);
		try {
   
			// 2.执行检索请求
			
			SearchResponse response = restHighLevelClient.search(searchRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);

			// 3.分析响应数据
			result = buildSearchResult(response, Param);
		} catch (IOException e) {
   
			e.printStackTrace();
		}
		return result;
	}

2、构建ES查询语句

/**
	 * 准备检索请求  [构建查询语句]
	 */
	private SearchRequest buildSearchRequest(SearchParam Param) {
   
		// 帮我们构建DSL语句的
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		// 1. 模糊匹配 过滤(按照属性、分类、品牌、价格区间、库存) 先构建一个布尔Query
		// 1.1 must
		BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
		if(!StringUtils.isEmpty(Param.getKeyword()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值