Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -189,38 +189,24 @@ private boolean bulkInsert(List<NewsEsDocument> docs, String section) throws IOE
}

/**
* ์–ด์ œ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋‰ด์Šค ๊ธฐ์‚ฌ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
* ํ‚ค์›Œ๋“œ๋กœ ๋‰ด์Šค ๊ธฐ์‚ฌ ๊ฒ€์ƒ‰
*
* <p>{@code combinedTokens} ํ•„๋“œ์— ๋Œ€ํ•ด match ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ ,
* {@code publishedAt} ํ•„๋“œ๊ฐ€ ์–ด์ œ(00:00~24:00)์ธ ๋ฐ์ดํ„ฐ๋งŒ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
* ๊ฒฐ๊ณผ๋Š” ์ ์ˆ˜(score) ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.</p>
* ์ ์ˆ˜(score) ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๋œ ์ƒ์œ„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.</p>
*
* @param keyword ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ
* @param size ์ตœ๋Œ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜
* @return ์–ด์ œ ๋‚ ์งœ ์ค‘ ํ‚ค์›Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋‰ด์Šค ๋„ํ๋จผํŠธ ๋ฆฌ์ŠคํŠธ
* @param size ์ตœ๋Œ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜
* @return ๊ฒ€์ƒ‰๋œ ๋‰ด์Šค ๋„ํ๋จผํŠธ ๋ฆฌ์ŠคํŠธ
* @throws IOException Elasticsearch ๊ฒ€์ƒ‰ ์‹คํŒจ ์‹œ ๋ฐœ์ƒ
*/
public List<NewsEsDocument> 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<NewsEsDocument> 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
Expand Down Expand Up @@ -270,45 +256,4 @@ public List<StringTermsBucket> getTopKeywordsForDateRange(LocalDate gte, LocalDa
.array();
}

// ======================= Deprecated =========================

/**
* Hot Fix
*
* Deprecated At 2025-07-24
* By ๊น€์›์ค‘
*
*/
// /**
// * ํ‚ค์›Œ๋“œ๋กœ ๋‰ด์Šค ๊ธฐ์‚ฌ ๊ฒ€์ƒ‰
// *
// * <p>{@code combinedTokens} ํ•„๋“œ์— ๋Œ€ํ•ด match ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ ,
// * ์ ์ˆ˜(score) ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๋œ ์ƒ์œ„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.</p>
// *
// * @param keyword ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ
// * @param size ์ตœ๋Œ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜
// * @return ๊ฒ€์ƒ‰๋œ ๋‰ด์Šค ๋„ํ๋จผํŠธ ๋ฆฌ์ŠคํŠธ
// * @throws IOException Elasticsearch ๊ฒ€์ƒ‰ ์‹คํŒจ ์‹œ ๋ฐœ์ƒ
// */
// public List<NewsEsDocument> searchByKeyword(String keyword, int size) throws IOException {
// SearchResponse<NewsEsDocument> 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();
// }
}