4.Search APIS(二)

1. Search Scroll API 搜索滚动API

  • 滚动API可用于从搜索请求中检索大量结果。为了使用滚动,需要按照给定的顺序执行以下步骤。
final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L));
SearchRequest searchRequest = new SearchRequest("posts");
searchRequest.scroll(scroll);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(matchQuery("title", "Elasticsearch"));
// 创建SearchRequest及其对应的SearchSourceBuilder。还可以选择设置大小以控制一次检索多少个结果。
searchSourceBuilder.size(size); 
searchRequest.source(searchSourceBuilder);
// 设置滚动间隔
searchRequest.scroll(TimeValue.timeValueMinutes(1L)); 

SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); 
String scrollId = searchResponse.getScrollId();
SearchHit[] searchHits = searchResponse.getHits().getHits();

while (searchHits != null && searchHits.length > 0) { 
    
    SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId); 
    scrollRequest.scroll(scroll);
    searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
    scrollId = searchResponse.getScrollId();
    searchHits = searchResponse.getHits().getHits();
}

ClearScrollRequest clearScrollRequest = new ClearScrollRequest(); 
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
boolean succeeded = clearScrollResponse.isSucceeded();

2. Multi-Search API 批量搜索

  • multiSearch API在单个http请求中并行执行多个搜索请求。
MultiSearchRequest request = new MultiSearchRequest();    
SearchRequest firstSearchRequest = new SearchRequest();   
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("user", "kimchy"));
firstSearchRequest.source(searchSourceBuilder);
request.add(firstSearchRequest);                          
SearchRequest secondSearchRequest = new SearchRequest();  
searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery("user", "luca"));
secondSearchRequest.source(searchSourceBuilder);
request.add(secondSearchRequest);

MultiSearchResponse response = client.msearch(request, RequestOptions.DEFAULT);
// 通过执行multiSearch方法返回的MultiSearchResponse包含MultiSearchRequest中每个SearchRequest的MultiSearchResponse.Item。
// 如果请求失败,则每个MultiSearchResponse.Item都将在getFailure中包含异常;
// 如果请求成功,则将在getResponse中包含SearchResponse:
MultiSearchResponse.Item firstResponse = response.getResponses()[0];   
assertNull(firstResponse.getFailure());                                
SearchResponse searchResponse = firstResponse.getResponse();           
assertEquals(4, searchResponse.getHits().getTotalHits().value);
MultiSearchResponse.Item secondResponse = response.getResponses()[1];  
assertNull(secondResponse.getFailure());
searchResponse = secondResponse.getResponse();
assertEquals(1, searchResponse.getHits().getTotalHits().value);

3. Field Capabilities API 字段API

  • 字段功能API允许检索多个索引中的字段的功能。
  • FieldCapabilitiesRequest包含要获取其功能的字段的列表(应返回),以及目标索引的可选列表。如果没有提供索引,则将在所有索引上执行请求。
  • 请注意,fields参数支持通配符表示法。例如,提供text_ *将导致返回所有与表达式匹配的字段。
FieldCapabilitiesRequest request = new FieldCapabilitiesRequest()
    .fields("user")
    .indices("posts", "authors", "contributors");

FieldCapabilitiesResponse response = client.fieldCaps(request, RequestOptions.DEFAULT);

Map<String, FieldCapabilities> userResponse = response.getField("user");  
FieldCapabilities textCapabilities = userResponse.get("keyword");

boolean isSearchable = textCapabilities.isSearchable();
boolean isAggregatable = textCapabilities.isAggregatable();

String[] indices = textCapabilities.indices(); 
String[] nonSearchableIndices = textCapabilities.nonSearchableIndices(); 
String[] nonAggregatableIndices = textCapabilities.nonAggregatableIndices();

4. Count API 计数API

  • CountRequest用于执行查询并获取查询的匹配数。可以使用与SearchSource中使用SearchSourceBuilder相似的方式来设置要在CountRequest中使用的查询。
CountRequest countRequest = new CountRequest(); 
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 
countRequest.source(searchSourceBuilder); 

// CountRequest还采用以下可选参数:
CountRequest countRequest = new CountRequest("blog") 
    .routing("routing") 
    .indicesOptions(IndicesOptions.lenientExpandOpen()) 
    .preference("_local"); 

CountResponse countResponse = client
    .count(countRequest, RequestOptions.DEFAULT

long count = countResponse.getCount();
RestStatus status = countResponse.status();
Boolean terminatedEarly = countResponse.isTerminatedEarly();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值