gpt4 book ai didi

elasticsearch - 如何在 Elastic High Level Rest Client 中使用 search_after 进行分页

转载 作者:行者123 更新时间:2023-12-02 22:10:53 24 4
gpt4 key购买 nike

我正在使用弹性 RestHighLevelClient 与 ES 交谈。我能够查询基本查询。虽然我正在尝试使用 teh search_after api 从我的前端查询中设计一个分页的 api。尽管 query_after 在 RestLowLevelClient api 中使用起来很简单,但我无法弄清楚如何在 HighLevel API 中使用它。

看起来 lucene api 有 SearchAfterSortedDocQuery,但我无法弄清楚如何将它与 Elasticsearch api 一起使用。例如:在下面的代码中,我初始化了 SearchAfterSortedDocQuery 查询,但不确定如何使用它。

        RestHighLevelClient client = ESRestClient.getClient();

SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("field1",value1));
searchSourceBuilder.query(QueryBuilders.termQuery("field2",value2));

searchSourceBuilder.from(0);
searchSourceBuilder.size(limit);
SortField[] sortFields = new SortField[2];

sortFields[0]= new SortField("field1", SortField.Type.LONG);
sortFields[1]= new SortField("field2", SortField.Type.LONG);


FieldDoc fieldDoc = new FieldDoc(0,0); //Is this correct? how to initialize field doc?
fieldDoc.fields = new Object[2];
fieldDoc.fields[0] = new Long("-156034");
fieldDoc.fields[1] = new Long("2297416849");

SearchAfterSortedDocQuery query = new SearchAfterSortedDocQuery(new Sort(sortFields), fieldDoc);
searchRequest.source(searchSourceBuilder);
searchRequest.indices("index1");

try {
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(response);
}
catch(IOException e){
System.out.println(e);
}

}

最佳答案

我认为不要使用 SearchAfterSortedDocQuery,只需在 searchSourceBuilder 中设置 search_after 如下所示

searchSourceBuilder.searchAfter(new Object[]{sortAfterValue});

之后使用 SearchRequest 和 rest client 来获取响应
SearchRequest searchRequest = new SearchRequest("index");
searchRequest.types("type");
searchRequest.source(searchSourceBuilder);

SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT)
SearchHits hits = searchResponse.getHits();

最后,您应该通过 getSortValues() 从点击中保留最后一个排序值以转到下一页。
hits.getAt(lastIndex).getSortValues()

Elasticsearch search_after api

希望这有帮助。

关于elasticsearch - 如何在 Elastic High Level Rest Client 中使用 search_after 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com