diff --git a/src/main/java/com/knowledge/base/infrastructure/south/es/FileElasticsearchGateway.java b/src/main/java/com/knowledge/base/infrastructure/south/es/FileElasticsearchGateway.java index f4a5483..fd44eb5 100644 --- a/src/main/java/com/knowledge/base/infrastructure/south/es/FileElasticsearchGateway.java +++ b/src/main/java/com/knowledge/base/infrastructure/south/es/FileElasticsearchGateway.java @@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -277,39 +278,26 @@ public class FileElasticsearchGateway { } /** - * 根据 fileName(带相对路径)批量查出 url + * 根据 fileName批量查出 url */ public Map getUrlsByFileNames(List fileNames) { - Map filePathUrlMap = new HashMap<>(); - if (CollectionUtil.isEmpty(fileNames)) { - return filePathUrlMap; - } - // ES 批量 term 查询 - BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must(QueryBuilders.termsQuery(FileEsField.FILENAME, fileNames)); - boolQuery.filter(QueryBuilders.rangeQuery(FileEsField.EXPIRE_TIME) - .gte(System.currentTimeMillis()) - .timeZone("+08:00")); - - SearchSourceBuilder builder = new SearchSourceBuilder() - .query(boolQuery) - .size(fileNames.size()); // 最多查 fileNames.size() 条 - SearchRequest request = new SearchRequest(INDEX_NAME).source(builder); - - try { - SearchResponse response = esClient.search(request, RequestOptions.DEFAULT); - for (SearchHit hit : response.getHits().getHits()) { - Map src = hit.getSourceAsMap(); - String filePath = String.valueOf(src.get(FileEsField.FILEPATH)); - String url = String.valueOf(src.get("url")); - filePathUrlMap.put(filePath, url); + Map result = new HashMap<>(); + if (CollectionUtil.isEmpty(fileNames)) return result; + List> keywordGroups = fileNames.stream().map(Collections::singletonList).collect(Collectors.toList()); + SearchResponse response = searchFileDocuments(keywordGroups, 1, fileNames.size()); + for (SearchHit hit : response.getHits().getHits()) { + Map src = hit.getSourceAsMap(); + String filename = String.valueOf(src.get(FileEsField.FILENAME)); + String url = String.valueOf(src.get("url")); + // 严格精确匹配 + if (fileNames.contains(filename)) { + result.put(filename, url); } - } catch (IOException e) { - log.error("[getUrlsByFileNames] error.", e); } - return filePathUrlMap; + return result; } + }