๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Elasticsearch

Elasticsearch Track total hits

by ์ฃผ๋ฐœ2 2025. 1. 30.
๋ฐ˜์‘ํ˜•

Elasticsearch์—์„œ ๋ฌธ์„œ์˜ ์ „์ฒด ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด 7๋ฒ„์ „๋ถ€ํ„ฐ track_total_hits ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-your-data.html#track-total-hits

 

Search your data | Elasticsearch Guide [7.17] | Elastic

A search query, or query, is a request for information about data in Elasticsearch data streams or indices. You can think of a query as a question, written in a way Elasticsearch understands. Depending on your data, you can use a query to get answers to qu

www.elastic.co

 

์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒด ํžˆํŠธ ์ˆ˜๋Š” ๋ชจ๋“  ๋งค์นญ๋˜๋Š” ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ด๋Š” ๋งŽ์€ ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜๋Š” ์ฟผ๋ฆฌ์—์„œ ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. track_total_hits ํŒŒ๋ผ๋ฏธํ„ฐ ์ „์ฒด ํžˆํŠธ ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”์ ํ• ์ง€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ 10,000๊ฐœ์˜ ํžˆํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ์‹์œผ๋กœ ํžˆํŠธ ์ˆ˜์˜ ํ•˜ํ•œ๋งŒ ์•Œ๋ฉด ์ถฉ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ๋ณธ ๊ฐ’์€ 10,000์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์š”์ฒญ์€ ์ตœ๋Œ€ 10,000๊ฐœ์˜ ํžˆํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ „์ฒด ํžˆํŠธ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ์ • threshold ์ดํ›„์—๋Š” ์ •ํ™•ํ•œ ํžˆํŠธ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ด ๋ฐฉ๋ฒ•์ด ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ์ข‹์€ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์ž…๋‹ˆ๋‹ค.

 

track_total_hits๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด, ๊ฒ€์ƒ‰ ์‘๋‹ต์—์„œ ์ฟผ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š” ํžˆํŠธ ์ˆ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(์˜ˆ. total.relation์€ track_total_hits๊ฐ€ true์ผ ๋•Œ ํ•ญ์ƒ "eq"๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.)

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ "total" ๊ฐ์ฒด์— ์žˆ๋Š” "total.relation"์ด "total.value"๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. "gte"์˜ ๊ฐ’์€ ์ฟผ๋ฆฌ์™€ ์ผ์น˜ํ•˜๋Š” ์ „์ฒด ํžˆํŠธ ์ˆ˜ ์ค‘ "total.value"์˜ ํ•˜ํ•œ์ž„์„ ์˜๋ฏธํ•˜๋ฉฐ, "eq" ๊ฐ’์€ "total.value"๊ฐ€ ์ •ํ™•ํ•œ ํžˆํŠธ ์ˆ˜์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

 

 

10,000๊ฑด์ด ๋„˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์กฐํšŒํ•˜๋ฉด ์ตœ๋Œ€ 10,000๊ฑด๊นŒ์ง€ ์กฐํšŒ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

 

{
  "track_total_hits": true
}

 

track_total_hits๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์„œ์˜ ์ „์ฒด ํžˆํŠธ ์ˆ˜๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ , relation์€ "eq"๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

 

{
  "track_total_hits": 1000
}

track_total_hits๋Š” integer๋กœ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

๋งŒ์•ฝ ๋ฌธ์„œ์˜ ์ „์ฒด ๊ฐฏ์ˆ˜๊ฐ€ track_total_hits์—์„œ ์„ค์ •ํ•œ ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, total.relation์ด "eq"๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

 

 

{
  "track_total_hits": false
}

๋งŒ์•ฝ ์ „์ฒด ํžˆํŠธ ์ˆ˜๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด, track_total_hits๋ฅผ false๋กœ ์„ค์ •ํ•จ์œผ๋กœ์จ ์ฟผ๋ฆฌ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

NativeQueryBuilder()
    .withQuery(mapToLawyerSearchESQueryDsl(categories, region, terms))
    .withPageable(pageable)
    .withSort(sort(sortBy))
    .withTrackTotalHits(true)
    .build()

 

Spring์—์„œ NativeQuery๋ฅผ ํ†ตํ•ด ES๋ฅผ ์กฐํšŒํ•œ๋‹ค๋ฉด, ์œ„์™€ ๊ฐ™์ด withTrackTotalHits() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

integer ๊ฐ’์ด ํ•„์š”ํ•˜๋ฉด withTrackTotalHitsUpTo() ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋‹ˆ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

'Elasticsearch' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Elasticsearch Random Score  (0) 2025.01.29
Elasticsearch Exists ํ‚ค์›Œ๋“œ  (0) 2024.12.22

๋Œ“๊ธ€