diff --git a/src/main/java/com/doc/parser/domain/impl/AbstractBaseFileImporter.java b/src/main/java/com/doc/parser/domain/impl/AbstractBaseFileImporter.java index a43582d..e1353d8 100644 --- a/src/main/java/com/doc/parser/domain/impl/AbstractBaseFileImporter.java +++ b/src/main/java/com/doc/parser/domain/impl/AbstractBaseFileImporter.java @@ -52,7 +52,14 @@ public abstract class AbstractBaseFileImporter implements DocumentImporter { logger.warn("路径未匹配 exclude.prefix,使用全路径: {}", absPath); relativePathObj = absPath; } + String relativePath = relativePathObj.toString().replace("\\", "/"); + String fileName = path.getFileName().toString(); + if(LocalCacheUtil.get(fileName) == null){ + // 将文件的路径缓存下来 + LocalCacheUtil.put(fileName, relativePath); + } + Long localMTime = Files.getLastModifiedTime(path).toMillis(); logger.info("absPath: {}", absPath.toString().replace("\\", "/")); logger.info("rerelativePath: {}, localMTime: {}", relativePath, localMTime); @@ -98,7 +105,7 @@ public abstract class AbstractBaseFileImporter implements DocumentImporter { // === 构建文档 === Map doc = new HashMap<>(); - doc.put("filename", path.getFileName().toString()); + doc.put("filename", fileName); doc.put("filepath", relativePath); doc.put("content", content); doc.put("mtime", localMTime); diff --git a/src/main/java/com/doc/parser/infrastructure/north/controller/SearchController.java b/src/main/java/com/doc/parser/infrastructure/north/controller/SearchController.java index 28be3fa..8758589 100644 --- a/src/main/java/com/doc/parser/infrastructure/north/controller/SearchController.java +++ b/src/main/java/com/doc/parser/infrastructure/north/controller/SearchController.java @@ -1,6 +1,10 @@ package com.doc.parser.infrastructure.north.controller; +import cn.hutool.core.map.MapUtil; +import cn.hutool.json.JSONUtil; import com.doc.parser.infrastructure.north.dto.SearchReq; +import com.doc.parser.infrastructure.util.LocalCacheUtil; +import com.google.common.collect.Maps; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.*; @@ -12,6 +16,8 @@ import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortOrder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -27,6 +33,8 @@ import java.util.regex.Pattern; @RequestMapping("/search") public class SearchController { + private static final Logger LOGGER = LoggerFactory.getLogger(SearchController.class); + private final RestHighLevelClient esClient; @Value("${search.default-page-size:10}") @@ -76,6 +84,23 @@ public class SearchController { return buildSearchResponse(response, flatKeywords, page, size); } + @PostMapping("file-path") + public Map resolveFilePath(@RequestBody Map req) { + if (MapUtil.isEmpty(req) || Objects.isNull(req.get("fileNames")) || !(req.get("fileNames") instanceof List)) { + LOGGER.error("SearchController#resolveFilePath Error. Invalid Input: " + JSONUtil.toJsonStr(req)); + return Maps.newHashMap(); + } + List fileNames = (List)req.get("fileNames"); + Map result = Maps.newHashMap(); + fileNames.forEach(name -> { + if(LocalCacheUtil.get(name) != null) { + result.put(name, LocalCacheUtil.get(name)); + } + }); + return result; + } + + private QueryBuilder buildSearchQuery(List> keywordGroups) { BoolQueryBuilder outerQuery = QueryBuilders.boolQuery(); @@ -142,6 +167,9 @@ public class SearchController { return String.join(" ... ", matchedSnippets); } + + + }