gpt4 book ai didi

java - 使用滚动搜索时如何删除elasticsearch中的重复搜索结果?

转载 作者:行者123 更新时间:2023-12-01 17:16:18 25 4
gpt4 key购买 nike

我正在开发一个集成 Java 和 Elasticsearch 的项目。

由于搜索大量数据,我正在使用scroll api。我想看到独特的结果(比如oracle中的distint)。

如何删除elasticsearch中重复的搜索结果?

我搜索了,但找不到 Java 版本。

我的代码是这样的(这只是示例代码):

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.source(searchSourceBuilder);

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();
}

有没有办法可以不重复地搜索松紧带上的数据?

最佳答案

滚动将返回elasticsearch中的所有文档。您无法在elasticsearch中执行不同的操作

有两种方法可以解决您的问题

  1. Field collapsing它对不同字段进行分组并返回前 1 个文档
  2. Terms Aggregation
{
"aggs": {
"t": {
"terms": {
"script": "doc['title.keyword'] + ' '+doc['description.keyword']"
}
}
}
}

滚动旨在获取大量文档,以上选项不适用于批量数据。因此,您需要在客户端执行不同的操作(在 Elasticsearch 之外)

关于java - 使用滚动搜索时如何删除elasticsearch中的重复搜索结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61380902/

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