开发学院

您的位置:首页>教程>正文

教程正文

ElasticSearch 7 JAVA实例:Multi Term Vectors API

  Multi Term Vectors API允许一次获得多个向量。

Multi Term Vectors Request

  创建MultiTermVectorsRequest有两种方法。

  第一种方法是创建一个空的MultiTermVectorsRequest,然后向其中添加单独的TermVectorsRequest求。

MultiTermVectorsRequest request = new MultiTermVectorsRequest(); //创建一个空的MultiTermVectorsRequest。
TermVectorsRequest tvrequest1 =
    new TermVectorsRequest("authors", "1");
tvrequest1.setFields("user");
request.add(tvrequest1); //将第一个术语向量请求添加到多术语向量请求中。

XContentBuilder docBuilder = XContentFactory.jsonBuilder();
docBuilder.startObject().field("user", "guest-user").endObject();
TermVectorsRequest tvrequest2 =
    new TermVectorsRequest("authors", docBuilder);
request.add(tvrequest2); //将人工文档的第二个术语请求添加到多术语请求中。

  当所有TermVectorsRequest共享相同的参数(如索引和其他设置)时,可以使用第二种方法。在这种情况下,可以创建一个模板TermVectorsRequest,并设置所有必要的设置,该模板请求可以与执行这些请求的所有文档id一起传递给MultiTermVectorsRequest。

TermVectorsRequest tvrequestTemplate =
    new TermVectorsRequest("authors", "fake_id"); //创建模板TermVectorsRequest。
tvrequestTemplate.setFields("user");
String[] ids = {"1", "2"};
MultiTermVectorsRequest request =
    new MultiTermVectorsRequest(ids, tvrequestTemplate); //将文档的id和模板传递给MultiTermVectorsRequest。

同步执行

  当以下列方式执行MultiTermVectorsRequest时,客户端会在继续执行代码之前等待返回MultiTermVectorsResponse:

MultiTermVectorsResponse response =
    client.mtermvectors(request, RequestOptions.DEFAULT);

  同步调用可能会在高级REST客户端中解析REST响应失败、请求超时或类似服务器没有响应的情况下抛出IOException。

  在服务器返回4xx或5xx错误代码的情况下,高级客户端会尝试解析响应主体错误详细信息,然后抛出一个通用的ElasticsearchException,并将原始ResponseException作为抑制异常添加到其中。

异步执行

  也可以异步方式执行MultiTermVectorsRequest,以便客户端可以直接返回。用户需要通过将请求和侦听器传递给异步MultiTermVectors方法来指定如何处理响应或潜在故障:

client.mtermvectorsAsync(
    request, RequestOptions.DEFAULT, listener);

  异步方法不会阻塞并立即返回。如果执行成功,则使用onResponse方法回调操作侦听器,如果执行失败,则使用onFailure方法回调操作侦听器。失败场景和预期异常与同步执行情况相同。

  MultiTermVectors的典型监听器如下所示:

listener = new ActionListener<MultiTermVectorsResponse>() {
    @Override
    public void onResponse(MultiTermVectorsResponse mtvResponse) {
        
    }
    @Override
    public void onFailure(Exception e) {
        
    }
};


Multi Term Vectors Response

  MultiTermVectorsResponse允许获得TermVectorsResponse的列表,每个响应都可以按照Term Vectors API中的描述进行检查。

List<TermVectorsResponse> tvresponseList =
    response.getTermVectorsResponses(); //获取MultiTermVectorsResponse列表
if (tvresponseList != null) {
    for (TermVectorsResponse tvresponse : tvresponseList) {
    }
}