Table of Contents
ElasticSearch – function_score
아래 내용은 위 링크의 내용을 내 맘대로 정리한 내용입니다.
기본 설정
function_score
는 하나의 query
와 하나 이상의 score function
으로 구성됩니다.
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"boost": "5",
"random_score": {},
"boost_mode": "multiply"
}
}
}
위에서는 매칭되는 문서에 대해 5 를 boost 하고,
random_score
함수로 생성된 값을 곱해줍니다.(multiply)
score function
score function
은 아래와 같은 다양한 함수가 존재합니다.
- script_score
- weight
- random_score
- field_value_factor
- decay functions: gauss, linear, exp
두개 이상의 score function
여러개의 score function
을 조합해서 검색할 수도 있습니다.
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"boost": "1",
"functions": [
{
"filter": {
"match": {
"search_string.ngram": {
"query": "아이폰 케이스",
"operator": "AND",
"analyzer": "my_ngram_analyzer3"
}
}
},
"weight": 50
},
{
"filter": {
"match": {
"search_string.ngram": {
"query": "아이폰 케이스",
"operator": "AND",
"analyzer": "my_ngram_analyzer2"
}
}
},
"weight": 40
},
{
"filter": {
"match": {
"search_string.ngram": {
"query": "아이폰 케이스",
"operator": "AND",
"analyzer": "my_ngram_analyzer"
}
}
},
"weight": 30
},
{
"filter": {
"match": {
"search_string.ngram": {
"query": "아이폰 케이스",
"operator": "OR",
"analyzer": "my_ngram_analyzer3"
}
}
},
"weight": 5
},
{
"filter": {
"match": {
"search_string.ngram": {
"query": "아이폰 케이스",
"operator": "OR",
"analyzer": "my_ngram_analyzer2"
}
}
},
"weight": 4
},
{
"filter": {
"match": {
"search_string.ngram": {
"query": "아이폰 케이스",
"operator": "OR",
"analyzer": "my_ngram_analyzer"
}
}
},
"weight": 3
}
]
}
}
}