ES java常用操作(elasticsearch)

文章展示了在Elasticsearch中进行多种查询操作的方法,包括模糊查询、数组IN查询、范围查询,以及must和mustNot的组合使用。同时,文章还涵盖了数据排序、分页、索引创建、数据删除和提交,以及如何配置和接入ES客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.模糊查询

    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        if (StringUtils.isNotEmpty(houseViewSearchDTO.getKeyword())) {
            queryBuilder.must(QueryBuilders.matchPhraseQuery("houseName", "*" + houseViewSearchDTO.getKeyword() + "*"));
        }

2.数组IN查询

            queryBuilder.must(QueryBuilders.termsQuery("sellStatus", houseViewSearchDTO.getSellStatus()));

3.范围查询

//大于开始价格  
queryBuilder.must(QueryBuilders.rangeQuery("houseTotalPrice").gte(
                    DECIMAL_GAP_APPLY.apply(new BigDecimal(houseViewSearchDTO.getStartPrice())).longValue()));


//小于结束价格
queryBuilder.must(QueryBuilders.rangeQuery("houseTotalPrice").lte(
                    DECIMAL_GAP_APPLY.apply(new BigDecimal(houseViewSearchDTO.getEndPrice())).longValue()));

4.must和mustNot组合使用

 //A数组存在
 BoolQueryBuilder bindOrganizationNoBoolQuery = QueryBuilders.boolQuery();         bindOrganizationNoBoolQuery.should(QueryBuilders.termsQuery("bindOrganizationNoList", houseViewSearchDTO.getOrganizationNoList()));
//B数组不存在
BoolQueryBuilder noBindOrganizationNoListBoolQuery = QueryBuilders.boolQuery();           noBindOrganizationNoListBoolQuery.must(QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery("noBindOrganizationNoList", houseViewSearchDTO.getOrganizationNoList())));
            bindOrganizationNoBoolQuery.should(noBindOrganizationNoListBoolQuery);
            queryBuilder.must(bindOrganizationNoBoolQuery);

5.对某个字段排序

BoolQueryBuilder boolQueryBuilder = mallHouseQueryAction.searchSourceBuild(houseViewSearchDTO);
 
SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource(); 
         searchSourceBuilder.query(boolQueryBuilder).sort(houseViewSearchDTO.getOrderFlag(), SortOrder.ASC);

6.分页查询

searchSourceBuilder.from((houseViewSearchDTO.getPageNo() - 1) * houseViewSearchDTO.getPageSize());
searchSourceBuilder.size(houseViewSearchDTO.getPageSize());

7.索引创建

     @Autowired
    private RestHighLevelClient esClient;


// 创建索引
        CreateIndexRequest request = new CreateIndexRequest("v1");
        CreateIndexResponse createIndexResponse =null;
        try {
            createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            log.info("失败");
        }
        // 响应状态
        boolean acknowledged = createIndexResponse.isAcknowledged();

8.数据删除

  BulkRequest bulkRequest = new BulkRequest();
  DeleteRequest deleteRequest = 
  newDeleteRequest(businessConfig.getItem().getRealHouseEsIndex());

   deleteRequest.type(businessConfig.getItem().getHouseEsType());
   deleteRequest.id(id.toString());
   bulkRequest.add(deleteRequest);
   esClient.bulk(bulkRequest, RequestOptions.DEFAULT);

9.数据提交

 BulkRequest bulkRequest = new BulkRequest();
        IndexRequest indexRequest = new IndexRequest(businessConfig.getItem().getRealHouseEsIndex());
        indexRequest.type(businessConfig.getItem().getHouseEsType());
        indexRequest.id(houseInfoESEntity.getId().toString());
        indexRequest.source(JSONUtil.fromObjToJson(houseInfoESEntity), XContentType.JSON);
        bulkRequest.add(indexRequest);
        esClient.bulk(bulkRequest, RequestOptions.DEFAULT);

10.数据查询

 SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(businessConfig.getItem().getRealHouseEsIndex());
        /*
        为稳定相关度分数排序逻辑,详见https://www.elastic.co/guide/en/elasticsearch/reference/6.8/consistent-scoring.html
         */
        searchRequest.types(businessConfig.getItem().getHouseEsType());
        searchRequest.preference("zcmall");
        searchRequest.source(sourceBuilder);
        log.debug("sourceSearch, index: {}, type: {}, source: {}", businessConfig.getItem().getRealSkuEsIndex(), businessConfig.getItem().getSkuEsType(),
                sourceBuilder);
        return esClient.search(searchRequest, RequestOptions.DEFAULT);

11.接入ES

/**
 * es bean
 * Luoxiao
 */
@Configuration
public class DalConfig {

    @Value("${}")
    private String esHost;
    
    @Value("${}")
    private int esRestPort;
    
    @Value("${}")
    private String esSecurityUser;

    private static final int SOCKET_TIMEOUT = 60 * 1000;

    /**
     * 创建es rest client 实例
     *
     * @return es rest client
     */
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestClientBuilder clientBuilder = RestClient
                .builder(Arrays.stream(esHost.split(","))
                        .map(s -> new HttpHost(s, esRestPort))
                        .toArray(HttpHost[]::new));
        if (StringUtils.hasText(esSecurityUser)) {
            String[] userNameAndPassword = esSecurityUser.split(":");
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userNameAndPassword[0], userNameAndPassword[1]));
            clientBuilder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
        }
        clientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                return requestConfigBuilder.setSocketTimeout(SOCKET_TIMEOUT);
            }
        });
        return new RestHighLevelClient(clientBuilder);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值