From 03922ae0aba9d335cba23e3cd55fcd51d039c822 Mon Sep 17 00:00:00 2001 From: wjkim9 Date: Fri, 25 Jul 2025 02:28:10 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=EF=B8=8F=20[=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=ED=9B=84=20=EA=B8=B4=EA=B8=89=20=EC=88=98=EC=A0=95]=20:=20sear?= =?UTF-8?q?chByKeyword=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit searchByKeyword 기능 수정 후 반환값에 문제가 있어 기존 버전으로 수정 --- .../ElasticSearch/service/NewsEsService.java | 69 ++----------------- 1 file changed, 7 insertions(+), 62 deletions(-) diff --git a/SpringBoot/src/main/java/Baemin/News_Deliver/Global/News/ElasticSearch/service/NewsEsService.java b/SpringBoot/src/main/java/Baemin/News_Deliver/Global/News/ElasticSearch/service/NewsEsService.java index 4d232e3..42c7e0c 100644 --- a/SpringBoot/src/main/java/Baemin/News_Deliver/Global/News/ElasticSearch/service/NewsEsService.java +++ b/SpringBoot/src/main/java/Baemin/News_Deliver/Global/News/ElasticSearch/service/NewsEsService.java @@ -189,38 +189,24 @@ private boolean bulkInsert(List docs, String section) throws IOE } /** - * 어제 날짜 기준으로 뉴스 기사 검색을 수행합니다. + * 키워드로 뉴스 기사 검색 * *

{@code combinedTokens} 필드에 대해 match 쿼리를 수행하고, - * {@code publishedAt} 필드가 어제(00:00~24:00)인 데이터만 필터링합니다. - * 결과는 점수(score) 기준으로 내림차순 정렬되어 반환됩니다.

+ * 점수(score) 기준으로 내림차순 정렬된 상위 결과를 반환합니다.

* * @param keyword 검색 키워드 - * @param size 최대 검색 결과 수 - * @return 어제 날짜 중 키워드를 포함하는 뉴스 도큐먼트 리스트 + * @param size 최대 검색 결과 수 + * @return 검색된 뉴스 도큐먼트 리스트 * @throws IOException Elasticsearch 검색 실패 시 발생 */ public List searchByKeyword(String keyword, int size) throws IOException { - LocalDate today = LocalDate.now(); - LocalDate yesterday = today.minusDays(1); - - String from = yesterday.atStartOfDay().toString(); // 어제 00:00:00 - String to = today.atStartOfDay().toString(); // 오늘 00:00:00 - SearchResponse response = elasticsearchClient.search(s -> s .index("news-index-nori") .size(size) .query(q -> q - .bool(b -> b - .must(m -> m.match(mm -> mm - .field("combinedTokens") - .query(keyword) - )) - .filter(f -> f.range(r -> r - .field("publishedAt") - .gte(JsonData.of(from)) - .lt(JsonData.of(to)) - )) + .match(m -> m + .field("combinedTokens") + .query(keyword) ) ) .sort(sort -> sort @@ -270,45 +256,4 @@ public List getTopKeywordsForDateRange(LocalDate gte, LocalDa .array(); } - // ======================= Deprecated ========================= - - /** - * Hot Fix - * - * Deprecated At 2025-07-24 - * By 김원중 - * - */ -// /** -// * 키워드로 뉴스 기사 검색 -// * -// *

{@code combinedTokens} 필드에 대해 match 쿼리를 수행하고, -// * 점수(score) 기준으로 내림차순 정렬된 상위 결과를 반환합니다.

-// * -// * @param keyword 검색 키워드 -// * @param size 최대 검색 결과 수 -// * @return 검색된 뉴스 도큐먼트 리스트 -// * @throws IOException Elasticsearch 검색 실패 시 발생 -// */ -// public List searchByKeyword(String keyword, int size) throws IOException { -// SearchResponse response = elasticsearchClient.search(s -> s -// .index("news-index-nori") -// .size(size) -// .query(q -> q -// .match(m -> m -// .field("combinedTokens") -// .query(keyword) -// ) -// ) -// .sort(sort -> sort -// .score(sc -> sc.order(SortOrder.Desc)) -// ), -// NewsEsDocument.class -// ); -// -// return response.hits().hits().stream() -// .map(Hit::source) -// .filter(Objects::nonNull) -// .toList(); -// } }