Elasticsearch Java High Level REST Client(Get API)

Get API

Get請求

GetRequest需要以下參數:

GetRequest getRequest = new GetRequest(
        "posts", 
        "doc",  
        "1");
  • posts — 索引。
  • doc — 類型。
  • 1 — 文檔id。

可選參數

可以選擇提供以下參數:

request.fetchSourceContext(FetchSourceContext.DO_NOT_FETCH_SOURCE);
  • 禁用源檢索,默認情況下啓用
String[] includes = new String[]{"message", "*Date"};
String[] excludes = Strings.EMPTY_ARRAY;
FetchSourceContext fetchSourceContext =
        new FetchSourceContext(true, includes, excludes);
request.fetchSourceContext(fetchSourceContext);
  • 爲特定字段配置源包含
String[] includes = Strings.EMPTY_ARRAY;
String[] excludes = new String[]{"message"};
FetchSourceContext fetchSourceContext =
        new FetchSourceContext(true, includes, excludes);
request.fetchSourceContext(fetchSourceContext);
  • 爲特定字段配置源排除
request.storedFields("message"); 
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
String message = getResponse.getField("message").getValue();
  • 配置特定存儲字段的檢索(要求字段分別存儲在映射中)。
  • 檢索message存儲字段(要求字段分別存儲在映射中)。
request.routing("routing");
  • 路由值。
request.parent("parent");
  • parent值。
request.preference("preference");
  • 偏好值。
request.realtime(false);
  • realtime標誌設置爲false(默認爲true)。
request.refresh(true);
  • 在檢索文檔之前執行刷新(默認爲false)。
request.version(2);
  • 版本。
request.versionType(VersionType.EXTERNAL);
  • 版本類型。

同步執行

以下列方式執行GetRequest時,客戶端在繼續執行代碼之前等待返回GetResponse

GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);

異步執行

執行GetRequest也可以以異步方式完成,以便客戶端可以直接返回,用戶需要通過將請求和偵聽器傳遞給異步get方法來指定響應或潛在故障的處理方式:

client.getAsync(request, RequestOptions.DEFAULT, listener);
  • 要執行的GetRequest和執行完成時要使用的ActionListener

異步方法不會阻塞並立即返回,完成後,如果執行成功完成,則使用onResponse方法回調ActionListener,如果失敗則使用onFailure方法。

get的典型監聽器看起來像:

ActionListener<GetResponse> listener = new ActionListener<GetResponse>() {
    @Override
    public void onResponse(GetResponse getResponse) {
        
    }

    @Override
    public void onFailure(Exception e) {
        
    }
};
  • onResponse — 執行成功完成時調用。
  • onFailure — 在整個GetRequest失敗時調用。

Get響應

返回的GetResponse允許檢索所請求的文檔及其元數據和最終存儲的字段。

String index = getResponse.getIndex();
String type = getResponse.getType();
String id = getResponse.getId();
if (getResponse.isExists()) {
    long version = getResponse.getVersion();
    String sourceAsString = getResponse.getSourceAsString();        
    Map<String, Object> sourceAsMap = getResponse.getSourceAsMap(); 
    byte[] sourceAsBytes = getResponse.getSourceAsBytes();          
} else {
    
}
  • 以字符串形式檢索文檔。
  • 將文檔檢索爲Map<String, Object>
  • byte[]的形式檢索文檔。
  • 處理未找到文檔的方案,請注意,雖然返回的響應具有404狀態代碼,但返回有效的GetResponse而不是拋出異常,此類響應不包含任何源文檔,並且其isExists方法返回false

當針對不存在的索引執行get請求時,響應具有404狀態代碼,拋出ElasticsearchException,需要按如下方式處理:

GetRequest request = new GetRequest("does_not_exist", "doc", "1");
try {
    GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
} catch (ElasticsearchException e) {
    if (e.status() == RestStatus.NOT_FOUND) {
        
    }
}
  • 處理拋出的異常,因爲索引不存在。

如果已請求特定文檔版本,並且現有文檔具有不同的版本號,則會引發版本衝突:

try {
    GetRequest request = new GetRequest("posts", "doc", "1").version(2);
    GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
} catch (ElasticsearchException exception) {
    if (exception.status() == RestStatus.CONFLICT) {
        
    }
}
  • 引發的異常表示返回了版本衝突錯誤。

上一篇:Index API

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章