ElasticSearch – function_score

By | 2022년 12월 21일
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
        }
      ]
    }
  }
}

답글 남기기