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

Elasticsearch Random Score

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

Elasticsearch ์—์„œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ๋ฌธ์„œ๋“ค์„ ๋žœ๋ค์œผ๋กœ ์กฐํšŒํ•˜๋ ค๋ฉด random_score ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-random

 

Function score query | Elasticsearch Guide [8.17] | Elastic

Keep in mind that taking the log() of 0, or the square root of a negative number is an illegal operation, and an exception will be thrown. Be sure to limit the values of the field with a range filter to avoid this, or use log1p and ln1p.

www.elastic.co

 

 

 

random_score๋Š” 0๋ถ€ํ„ฐ 1๋ฏธ๋งŒ๊นŒ์ง€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋œ ์ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๋ถ€ Lucene ๋ฌธ์„œ์˜ ID๋ฅผ ๋‚œ์ˆ˜์˜ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ํšจ์œจ์ ์ด์ง€๋งŒ, ๋ฌธ์„œ๊ฐ€ ๋ณ‘ํ•ฉ์— ์˜ํ•ด ์žฌ๋ฒˆํ˜ธํ™”(?) ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์ ์ˆ˜๋ฅผ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, seed์™€ field๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ์ ์ˆ˜๋Š” seed, ํ•ด๋‹น ๋ฌธ์„œ์˜ field ๊ฐ’ ์ค‘ ์ตœ์†Œ๊ฐ’, ๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค ์ด๋ฆ„๊ณผ ์ƒค๋“œ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋œ salt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์œผ๋กœ ๊ฐ™์€ ๊ฐ’์ด์ง€๋งŒ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ์ €์žฅ๋œ ๋ฌธ์„œ๋“ค์€ ๋‹ค๋ฅธ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋™์ผํ•œ ์ƒค๋“œ ๋‚ด์—์„œ ๋™์ผํ•œ field ๊ฐ’์„ ๊ฐ€์ง„ ๋ฌธ์„œ๋“ค์€ ๋™์ผํ•œ ์ ์ˆ˜๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ๋ฌธ์„œ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ๊ฐ’์ด ์žˆ๋Š” ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ _seq_no ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, _seq_no ํ•„๋“œ ๊ฐ’์€ ๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋ ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ, ์ ์ˆ˜๋„ ๊ทธ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

field ์„ค์ • ์—†์ด seed๋งŒ ์„ค์ •์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, ์ด๋Š” _id ํ•„๋“œ์—์„œ fielddata๋ฅผ ๋กœ๋“œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•˜๊ฒŒ ๋˜์–ด ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

exists-tet ์ธ๋ฑ์Šค _seq_no

 

 

GET /exists-tet/_search
{
  "query": {
    "function_score": {
      "random_score": {}
    }
  }
}

์•„๋ฌด๋Ÿฐ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์„œ๋“ค์— ๋Œ€ํ•ด ๋žœ๋ค์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

 

 

GET /exists-tet/_search
{
  "query": {
    "function_score": {
      "random_score": {
        "field": "_seq_no"
      }
    }
  }
}

_seq_no ์„ ํ•„๋“œ๋กœ ์ง€์ •ํ•˜๋”๋ผ๋„ ๋žœ๋ค ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ๋Š” QueryDsl ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ„์™€ ๊ฐ™์ด seed, field๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

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

Elasticsearch Track total hits  (1) 2025.01.30
Elasticsearch Exists ํ‚ค์›Œ๋“œ  (0) 2024.12.22

๋Œ“๊ธ€