Elasticsearch 사용자 정의 평점(사용자 정의 평점)
4653 단어 ElasticSearch
하나.관련 개념:
tf(t in d) = √frequency
검색어가 이 필드에 나타나는 빈도는?출현 빈도가 높을수록 관련성도 높다.필드에 다섯 번 나타나는 것이 한 번만 나타나는 것보다 관련성이 높다.
idf(t) = 1 + log ( numDocs/(docFreq + 1))
모든 검색어가 색인에 나타나는 빈도는?빈도가 높을수록 관련성이 낮다.검색어가 대부분의 문서에 나타나는 것보다 소수의 문서에 나타나는 권한이 낮습니다.
2. 계산 공식은 다음과 같다. score(q,d) = queryNorm(q) · coord(q,d) · ∑ (tf(t,d) · idf(t)² · t.getBoost() · norm(t,d))
추가 매개변수 정의:
score(q,d) = queryNorm(q) · coord(q,d) · ∑ (tf(t,d) · idf(t)² · t.getBoost() · norm(t,d))
norm(d) = 1/√numTerms
필드의 길이는 얼마입니까?길이가 길수록 관련성이 낮아진다.검색어가 짧은 제목에 나타나는 것은 같은 단어보다 긴 콘텐츠 필드에 나타나는 권한이 더 크다.
queryNorm
는 조회를 귀일화시키려고 시도한다. 이렇게 하면 두 개의 서로 다른 조회 결과를 비교할 수 있다.이 인자는 조회 과정의 맨 앞에서 계산한 것으로 구체적인 계산은 구체적인 조회에 의존한다
queryNorm = 1 / √sumOfSquaredWeights
sumOfSquaredWeights
는 쿼리의 각 단어에 대한 IDF의 제곱입니다.이상은 한 단어를 검색할 때의 관련도를 계산한 것이다. 여러 단어를 조회할 때 여러 개의 관련도를 얻으면 벡터 공간 모델에 따라 전체적인 유사도를 계산해야 한다.
벡터 공간 모델:vector
벡터 공간 모델(vector space 모델)은 비교적 여러 단어로 조회하는 방식을 제공한다. 단일 평점은 문서와 조회의 일치 정도를 대표한다
벡터 공간 모델에서 벡터 공간 모델의 모든 숫자는 한 단어의 권중을 대표하고 주파수/역방향 문서 주파수(termfrequency/inversedocumentfrequency) 계산 방식과 유사하다.
3. 제어 관련도
일반적으로 관련도를 제어하는 수요는 두 가지로 나뉜다.
constant_score
쿼리에 쿼리나 필터를 포함할 수 있으며, 일치하는 문서에 대한 평점 1
을 지정하고 TF/IDF 정보를 무시할 수 있습니다.function_score
조회는 평점 과정을 제어하는 궁극의 무기로 주 조회와 일치하는 문서마다 함수를 적용하여 원시 조회 평점_score
을 바꾸거나 완전히 교체하는 목적을 달성할 수 있다.본고는 주로 사용script_score
함수를 소개한다.스크립트를 사용하여 평가 script_ 계산하기score 사용자 정의 스크립트는 채점 계산을 완전히 제어할 수 있습니다.
{
"function_score": {
"functions": {
"script_score": {
"script": "doc['price'].value + doc['margin'].value"
}
}
}
}
4、Painless
es 스크립트 엔진은 간단하고 안전하며 통증 없이 사용됩니다. Painless는 화이트 리스트를 사용하여 함수와 필드의 접근을 제한하고 es의 장면을 최적화하며 es 데이터만 조작하여 더욱 경량급입니다.
Painless에서 변수는 기본 데이터 유형, 참조 유형, 문자열, void
, (반환되지 않음), 배열 및 동적 유형으로 선언될 수 있습니다.지원되는 기본 유형은 다음과 같습니다.
byte, short, char, int, long, float, double, boolean.설명 변수는 java와 유사합니다.int i = 0; double a; boolean g = true;
그룹 형식은 1차원과 다차원을 지원하며, 초기값은null입니다.인용 형식과 마찬가지로 new 키워드를 사용하고 모든 차원에 괄호를 설정합니다int[] x = new int[2];
x[0] = 3;
x[1] = 4;
int[] b = new int[] {1,2,3,4,5};
painless는 동적 형식을 지원합니다.elasticsearch는 자동으로 형식을 추정합니다def a = 1;
def b = "foo";
def[][] h = new def[2][2];
조건문 및 연산자
Painless는 우선순위와 결합성을 제외하고 다른 고급 언어와 거의 호환되는 온전한 조작부호 목록을 포함한다.if (doc['foo'].value = 5) {
doc['foo'].value *= 10;
}
else {
doc['foo'].value += 10;
}
Painless 지원if else
또는 지원되지 않음else if
순환
def total = 0;
for (def i = 0; i < doc['scores'].length; i++) {
total += doc['scores'][i];
}
return total;
5. 통제 관련도 실천
이 실례에서 script_score, 평점 설정: switch
{
"query": {
"function_score": {
"query": {
"match": {
"name": "1"
}
},
"functions": [
{
"script_score": {
"script": {
"params": {
"download_ratio": 2.5,
"replication_ratio": 1.2
},
"lang": "painless",
"inline": "doc['download_cnt'].value * params.download_ratio + doc['replication_cnt'].value * params.replication_ratio"
}
}
}
]
}
}
}
_검색 작업의 모든 반환값은 doc['download_cnt'].value * 2.5 +doc['replication_cnt'].value * 1.2
형식의 변수doc를 통해 얻을 수 있습니다.다른 모든 스크립트 언어와 마찬가지로 [] 로 map
의 값을 가져옵니다.여기서 강조해야 할 것은doc에서만_검색
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회
부록:
1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다.
예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
int i = 0; double a; boolean g = true;
int[] x = new int[2];
x[0] = 3;
x[1] = 4;
int[] b = new int[] {1,2,3,4,5};
def a = 1;
def b = "foo";
def[][] h = new def[2][2];
if (doc['foo'].value = 5) {
doc['foo'].value *= 10;
}
else {
doc['foo'].value += 10;
}
def total = 0;
for (def i = 0; i < doc['scores'].length; i++) {
total += doc['scores'][i];
}
return total;
이 실례에서 script_score, 평점 설정:
switch
{
"query": {
"function_score": {
"query": {
"match": {
"name": "1"
}
},
"functions": [
{
"script_score": {
"script": {
"params": {
"download_ratio": 2.5,
"replication_ratio": 1.2
},
"lang": "painless",
"inline": "doc['download_cnt'].value * params.download_ratio + doc['replication_cnt'].value * params.replication_ratio"
}
}
}
]
}
}
}
_검색 작업의 모든 반환값은
doc['download_cnt'].value * 2.5 +doc['replication_cnt'].value * 1.2
형식의 변수doc를 통해 얻을 수 있습니다.다른 모든 스크립트 언어와 마찬가지로 [] 로 map
의 값을 가져옵니다.여기서 강조해야 할 것은doc에서만_검색
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회부록: 1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다. 예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.