ElasticSearch - function_score 소개

6833 단어 ElasticSearch
function_score 내용이 많습니다. 이 편은 주로 function_score 내용에 대해 체계적인 설명을 한 후에 몇 편의 실제 응용 방법이 나올 것입니다. 아래 링크를 참고하십시오.
ElasticSearch - function_score(field_value_factor 인스턴스)
ElasticSearch - function_score(weight 구체적인 실례)
ElasticSearch - function_score (감쇠 함수 linear, exp,gauss 구체적인 실례)
  • ES를 사용하여 전체 텍스트 검색을 할 때 검색 결과는 기본적으로 문서의 관련도로 정렬됩니다. 이 "문서의 관련도"는 function_score 자체 정의, 즉 우리는function_를 통해score,'어떤 문서의 관련도가 더 높은지'컨트롤하기
  • function_score는 문서_score를 처리하는 데 전문적으로 사용되는 DSL로, 모든 주 조회query가 일치하는 문서에 강화 함수를 적용하여 원시 조회 평점 score를 바꾸는 목적을 달성할 수 있습니다
  • function_score는 메인 쿼리query가 끝난 후 일치하는 문서마다 일련의 재채점 작업을 진행하여 여러 필드를 함께 종합적으로 평가할 수 있고 필터를 사용하여 결과를 여러 개의 서브집합 (특성마다 하나의 필터) 으로 구분할 수 있으며 서브집합마다 다른 강화 함수 사용
  • function_score는 몇 가지 강화 _score 계산 함수를 제공했다
  • weight: 간단하고 규범화되지 않은 권중 승급치 설정
  • weight 강화 함수는 boost 매개 변수와 유사하여 어떠한 조회에도 사용할 수 있지만 약간의 차이점은 weight가 Lucene nomalize에 의해 이해하기 어려운 부동점수가 아니라 직접 응용된다는 것이다(boost는 nomalize)
  • 예를 들어 weight가 2인 경우 최종 결과new_score = old_score * 2
  • field_value_factor: 필드의 값을 곱하기old_score
  • 필드shareCount 또는 필드likiCount를 고려 요소로 하는 것 같다new_score = old_score * likeCount
  • random_score: 사용자마다 서로 다른 무작위 평점을 사용하여 결과 정렬을 하지만 특정한 사용자에게 보이는 순서는 시종 일치한다
  • (linear、exp、guass): 필드 값을 기준으로 값이 가까울수록 점수가 높음
  • script_score: 상기 범위를 초과할 경우 사용자 정의 스크립트로 평가 계산을 완전히 제어할 수 있지만, 스크립트를 추가로 유지해야 하기 때문에 유지보수가 쉽지 않기 때문에 ES가 제공하는 평가 함수를 최대한 사용하면 수요를 충족시키지 못하고 script_score

  • function_scroe 기타 보조 매개 변수
  • boost_mode: 결정old_score와 강화 score는 어떻게 통합합니까
  • multiply(기본값): new_score = old_score * score
  • sum : new_score = old_score + score
  • min : old_score 및 강화 score 작은 값, new_score = min(old_score, score)
  • max : old_score와 강화score는 비교적 큰 값을 얻고, new_score = max(old_score, score)
  • replace: score 강화 old_ 직접 교체score, new_score = score

  • score_mode: functions 안의 강화 score들이 어떻게 합병될지 결정합니다. 우선 통합 강화 score들이 하나의 총 강화 score가 되고 총 강화 score를 사용하여old_score 합병, 다시 말하면 score_mode, boost_ 다시 실행하기mode
  • multiply(기본값)
  • sum
  • avg
  • first: 첫 함수(filter가 있을 수도 있고 없을 수도 있음)의 결과를 최종 결과로 사용
  • max
  • min

  • max_boost: 강화 함수를 제한하는 가장 큰 효과는 강화 score의 최대 수량을 제한하는 것이지만old_score
  • 강화score가 max_를 초과하면boost 제한 값, 강화된 score 값을 max_boost 값
  • 강화 score가 5이고 max_boost는 2입니다. 강화score가 max_를 초과했기 때문입니다.boost의 제한, 그래서 max_boost는 강화score를 2
  • 로 바꿉니다.
  • 쉽게 말하면 score = min( score, max_boost)

  • function_score 쿼리 템플릿
  • function_ 을 사용하려면score 점수 변경,function_score 조회
  • 쉽게 말하면 한function_score 내부query의 전문 검색을 통해 얻은 _score을 바탕으로 그에게 다른 필드의 평점 기준을 더하면'전문 검색+기타 필드'를 종합하여 평점하는 효과
  • 를 얻을 수 있다
  • 단일 강화 함수의 조회 템플릿
    GET 127.0.0.1/mytest/doc/_search
    {
        "query": {
            "function_score": {
                "query": {.....}, // , , old_score
                "field_value_factor": {...}, // old_score , , score
    , function , query 
                "boost_mode": "multiply", // old_score score new_score
                "max_boost": 1.5 // score , old_score
            }
        }
    }
  • 여러 개의 강화 함수 검색 템플릿
  • 만약에 여러 개의 강화 함수가 있다면 functions를 사용하여 이 강화 함수들을 포함해야 한다. functions는 하나의 수조로 그 안에 사용할 강화 함수 목록이 놓여 있다
  • functions의 강화 함수에 필터를 지정할 수 있습니다. 이렇게 하면 문서에서 이 필터의 요구를 충족시켜야만 이 필터의 강화 함수가 필터에 적용되고 필터를 지정하지 않아도 됩니다. 그러면 이 강화 함수는 전체 필터에 적용됩니다
  • 한 문서는 한 번에 여러 개의 강화 함수와 여러 개의 filter를 만족시킬 수 있다. 한 번에 여러 개를 만족시키면 여러 개의 강화 score가 생기기 때문에 ES는 score_mode가 정의한 방식으로 이러한 강화 score들을 통합하여 총 강화 score를 얻고 총 강화 score를 얻은 후에야 boost_mode가 정의한 방식과 old_score 합병
  • 아래의 예처럼,field_value_factor와gauss 이 두 가지 강화 함수는 모든 문서에 적용되고weight는 filter를 만족시키는 문서에만 적용된다. 만약에 어떤 문서가 filter의 조건을 만족시켰다고 가정하면 3개의 강화 score를 얻을 수 있다. 이 3개의 강화 score는sum의 방식으로 하나의 총 강화 score로 통합되어old_score는multiply방식으로합병
    GET 127.0.0.1/mytest/doc/_search
    {
        "query": {
            "function_score": {
                "query": {.....},
                "functions": [   // ( filter+ ), score, 
     functions score
                    { "field_value_factor": ... },
                    { "gauss": ... },
                    { "filter": {...}, "weight": ... }
                ],
                "score_mode": "sum", // score ,
                "boost_mode": "multiply" // score old_score 
            }
        }
    }

  • function 조정에 집착하지 마세요_점수
  • 문서의 관련도 조정은 매우 현저하다.'가장 관련된 문서'는 닿기 어려운 모호한 개념으로 사람마다 문서의 순서에 대해 서로 다른 생각을 가지고 있기 때문에 지속적인 반복 조정에 빠지기 쉽지만 뚜렷한 진전이 없다
  • 이런 사순환에 뛰어들지 않기 위해function_score 시 반드시 사용자의 조작을 감시하고 감시해야 의미가 있다
  • 만약에 되돌아오는 문서가 사용자가 원하는 높은 관련 문서라면 사용자는 상위 10개 중의 한 문서를 선택하여 원하는 결과를 얻을 수 있다. 반대로 사용자는 왔다 갔다 클릭하거나 새로운 검색 조건을 시도할 수 있다
  • 이런 감시 수단이 생기면 완벽한 function_score는 문제가 아니다
  • 따라서 function_score의 중점은 사용자를 감시하고 사용자와 상호작용을 통해 우리의 검색 조건을 천천히 조정해야 한다는 데 있다. 한 걸음 한 걸음 나아갈 생각을 하지 말고 처음으로 문서의 관련도를 가장 잘 조정해야 한다. 이것은 거의 불가능하다. 왜냐하면 사용자 자신도 자신이 무엇을 원하는지 모르기 때문이다
  • 좋은 웹페이지 즐겨찾기