This commit is contained in:
Luke.Ye 2025-07-08 14:11:45 +08:00
parent d4e0d06ded
commit 69a3a1bb49

View File

@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.IOException; import java.io.IOException;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -277,39 +278,26 @@ public class FileElasticsearchGateway {
} }
/** /**
* 根据 fileName带相对路径批量查出 url * 根据 fileName批量查出 url
*/ */
public Map<String, String> getUrlsByFileNames(List<String> fileNames) { public Map<String, String> getUrlsByFileNames(List<String> fileNames) {
Map<String, String> filePathUrlMap = new HashMap<>(); Map<String, String> result = new HashMap<>();
if (CollectionUtil.isEmpty(fileNames)) { if (CollectionUtil.isEmpty(fileNames)) return result;
return filePathUrlMap; List<List<String>> keywordGroups = fileNames.stream().map(Collections::singletonList).collect(Collectors.toList());
} SearchResponse response = searchFileDocuments(keywordGroups, 1, fileNames.size());
// 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()) { for (SearchHit hit : response.getHits().getHits()) {
Map<String, Object> src = hit.getSourceAsMap(); Map<String, Object> src = hit.getSourceAsMap();
String filePath = String.valueOf(src.get(FileEsField.FILEPATH)); String filename = String.valueOf(src.get(FileEsField.FILENAME));
String url = String.valueOf(src.get("url")); String url = String.valueOf(src.get("url"));
filePathUrlMap.put(filePath, url); // 严格精确匹配
if (fileNames.contains(filename)) {
result.put(filename, url);
} }
} catch (IOException e) {
log.error("[getUrlsByFileNames] error.", e);
} }
return filePathUrlMap; return result;
} }
} }