내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Elasticsearch에서 기본 채점 메커니즘(예: BM25 알고리즘)은 대부분의 경우 좋은 검색 결과 순위를 제공할 수 있습니다. 그러나 일부 특정 시나리오에서는 비즈니스 요구 사항에 따라 검색 결과를 보다 세부적으로 정렬해야 할 수도 있습니다. 이때 Elasticsearch는 이러한 복잡한 요구사항을 충족시키기 위해 맞춤형 스코어링(Function Score Query) 및 스크립트 스코어링(Script Score) 기능을 제공합니다. 이 문서에서는 Elasticsearch에서 채점 및 스크립트 채점을 사용자 정의하는 방법을 자세히 설명합니다.
사용자 정의 채점을 사용하면 사전 정의된 기능 세트를 기반으로 각 문서의 기본 점수를 수정할 수 있습니다. 이러한 함수는 문서의 필드 값, 쿼리 기준 또는 기타 요소를 기반으로 새 등급을 계산할 수 있습니다. 궁극적으로 Elasticsearch는 원래 점수와 사용자 지정 점수를 결합하여 검색 결과의 순위를 결정합니다.
Elasticsearch는 다음을 포함하되 이에 국한되지 않는 사용자 지정 채점을 위한 다양한 내장 기능을 제공합니다.
전자상거래 웹사이트가 있고 사용자가 제품을 검색할 때 제품 가격과 평점을 모두 고려하고 싶어한다고 가정해 보겠습니다.우리는 사용할 수 있습니다function_score
이 요구 사항을 달성하기 위한 쿼리:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"field_value_factor": {
"field": "price",
"modifier": "reciprocal",
"params": {
"scale": 100
}
}
},
{
"field_value_factor": {
"field": "rating",
"missing": 1.0
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
}
이 예에서는field_value_factor
이 함수는 항목의 가격과 평가를 기반으로 사용자 정의 평가를 계산합니다. 가격은 상호 붕괴(reciprocal
), 가격이 낮은 제품의 점수가 높도록 점수는 필드 값을 직접 사용합니다. 마지막으로 두 함수의 등급을 추가하고 원래 등급을 대체합니다.
스크립트 채점을 통해 사용자 정의 스크립트 언어(예: Painless)를 사용하여 문서의 점수를 계산할 수 있습니다. 이 접근 방식은 최고의 유연성을 제공하며 거의 모든 논리를 기반으로 점수를 계산할 수 있습니다.
제품의 재고 수량에 따라 등급을 조정한다고 가정해 보겠습니다. 재고가 적은 제품은 등급이 더 높습니다.우리는 사용할 수 있습니다script_score
이 요구 사항을 충족하는 기능은 다음과 같습니다.
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
"lang": "painless"
}
}
}
],
"score_mode": "multiply",
"boost_mode": "replace"
}
}
}
이 예에서는 Painless 스크립팅 언어를 사용하여 등급을 계산합니다. 스크립트는 제품의 재고 수량을 결정합니다(doc['stock'].value
)는 재고량이 많을수록 점수가 낮을수록 점수가 높아집니다. 그런 다음 이 점수에 원래 평점을 곱하여 검색 결과의 최종 순위를 조정합니다.
사용자 지정 채점 및 스크립트 채점은 Elasticsearch에서 제공하는 강력한 기능으로, 이를 통해 비즈니스 요구 사항에 따라 검색 결과를 세분화할 수 있습니다. 이러한 기능을 합리적으로 사용함으로써 사용자 경험을 향상하고 사용자의 다양한 요구를 충족할 수 있습니다. 그러나 사용자 정의 채점 및 스크립트 채점은 쿼리 복잡성과 계산 비용을 증가시킬 수 있으므로 실제 응용 프로그램에서는 장단점을 고려하여 주의해서 사용해야 합니다.