[Elasticsearch] 제어 상관 관계 (2) - Lucene의 PSF(Practical Scoring Function) 및 쿼리 기간 향상
16692 단어 elasticsearch검색 엔진검색Lucene전체 텍스트 검색
Lucene의 Practical Scoring Function
다중 단어 쿼리(Multiterm Queries)에 대해 Lucene는 부울 모델(Boolean Model), TF/IDF, 벡터 공간 모델(Vector Space Model)을 사용하여 그것들을 결합시켜 일치하는 문서를 수집하고 그것들을 나누어 계산하는 데 사용한다.
아래와 같은 여러 단어 조회:
GET /my_index/doc/_search
{
"query": {
"match": {
"text": "quick fox"
}
}
}
내부에서 다음과 같이 다시 쓰여집니다.
GET /my_index/doc/_search
{
"query": {
"bool": {
"should": [
{"term": { "text": "quick" }},
{"term": { "text": "fox" }}
]
}
}
}
bool 조회는 볼 모형을 실현했습니다. 이 예에서 단어quick, 단어fox 또는 둘 다 포함된 문서만 되돌아옵니다.
문서가 조회와 일치하면 Lucene는 이 조회에 대한 값을 계산한 다음 일치하는 단어마다 값을 결합합니다.분수 값을 계산하는 공식을 Practical Scoring Function이라고 합니다.그것은 좀 무서워 보이지만, 물러서지 마라. - 공식의 절대 다수의 부분을 너는 이미 알고 있다.다음은 우리가 그것이 도입한 새로운 요소들을 소개할 것이다.
1 score(q,d) =
2 queryNorm(q)
3 · coord(q,d)
4 · ∑ (
5 tf(t in d)
6 · idf(t)²
7 · t.getBoost()
8 · norm(t,d)
9 ) (t in q)
각 행의 의미는 다음과 같습니다.
score(q,d)는 문서 d가 조회 q에 대한 관련도 점수입니다..
queryNorm(q)은 쿼리 요약 인자(Query Normalization Factor)로 새로 추가된 부분입니다..
coord(q,d)는 Coordination Factor입니다. 새로 추가된 부분입니다..
문서 d의 모든 단어 t가 조회q에 대한 권한의 합..
tf(t in d)는 문서 d의 단어 t의 단어 빈도(Term Frequency)입니다
idf(t)는 단어 t의 인덱스 주파수(Inverse Document Frequency)입니다
t.getBoost()는 질의에 적용되는 향상(Boost)으로, 새로 추가된 부분입니다..
norm(t, d)은 필드 길이 요약(Field-length Norm)으로 인덱스 기간 필드 향상(Index-time Field-level Boost)과 결합되어 새로 추가된 부분입니다
너는 score, tf 및 idf의 뜻을 알아야 한다.queryNorm, coord, t.getBoost 및norm이 새로 추가되었습니다.
이 장에서 잠시 후에 우리는 조회 기간 향상(Query-time Boosting)에 대해 토론할 것이다. 우선 조회 귀약, Coordination 및 색인 기간 필드 단계 향상에 대해 설명한다.
쿼리 요약 인자(Query Normalization Factor)
쿼리 요약 인자(query Norm)는 하나의 쿼리를 요약하여 여러 쿼리의 결과를 비교할 수 있도록 시도합니다.
TIP
조회 귀약의 목적은 서로 다른 조회의 결과를 비교할 수 있도록 하는 것이지만, 그 효과는 그다지 좋지 않다.관련도_score의 유일한 목적은 현재 조회의 결과를 정확한 순서로 정렬하는 것이다.너는 서로 다른 조회에서 얻은 관련도 점수를 비교하려고 시도해서는 안 된다.
이 인자는 조회 시작 단계에서 계산된다.실제 계산은 조회 자체에 달려 있지만 전형적인 실현은 다음과 같다.
queryNorm = 1/√sumOfSquaredWeights
sum Of Squared Weights는 조회 중의 모든 단어의 IDF를 누적한 다음에 제곱근을 가져옵니다.
TIP
같은 조회 귀약 인자는 모든 문서에 적용될 것이며, 너도 그것을 바꿀 방법이 없다.요컨대 그것은 소홀히 할 수 있다.
Query Coordination
Coordination 인자(coord)는 더 많은 검색어를 포함하는 문서를 장려하는 데 사용됩니다.문서에 조회 단어가 많을수록 이 문서는 이 조회의 고품질 일치일 수 있습니다.
Quick brown fox에 가입했습니다. 모든 단어의 무게는 1.5입니다.Coordination 인자가 없을 때, 분수는 문서의 모든 단어의 가중치가 될 수 있습니다.예:
fox 포함 문서 -> 점수: 1.5
Quick fox가 포함된 문서 -> 점수: 3.0
Quick brown fox가 포함된 문서 -> 점수: 4.5
Coordination 인자는 문서에 일치하는 단어의 수를 곱한 다음 조회의 총 단어 수를 나눈다.Coordination 인자를 사용한 후 분수는 다음과 같습니다.
fox 포함 문서 -> 점수: 1.5 * 1/3 = 0.5
Quick fox가 포함된 문서 -> 점수: 3.0 * 2/3 = 2.0
Quick brown fox가 포함된 문서 -> 점수: 4.5 * 3/3 = 4.5
위의 결과에서 세 개의 단어를 모두 포함하는 문서의 점수는 두 개의 단어만 포함하는 문서보다 훨씬 높다.
Quick brown fox에 대한 조회는 bool 조회에 의해 다음과 같이 다시 작성된다는 것을 기억해야 합니다.
GET /_search
{
"query": {
"bool": {
"should": [
{ "term": { "text": "quick" }},
{ "term": { "text": "brown" }},
{ "term": { "text": "fox" }}
]
}
}
}
bool 조회는 모든should 조회 자구에 기본적으로 조회Coordination을 사용하지만, 사용하지 않을 수 있습니다.왜 당신은 그것을 비활성화해야 합니까?그래, 통상적인 답은 필요하지 않다는 것이다.조회 Coordination은 일반적으로 긍정적인 작용을 한다.match와 같은 여러 고급 쿼리 (High-level Query) 를 bool 쿼리로 포장할 때 Coordination을 사용하는 것도 의미가 있습니다.일치하는 검색 자구가 많을수록 검색 요청과 되돌아오는 문서 사이의 일치 정도가 높아집니다.
그러나 일부 고급 용례에서 Coordination을 사용하지 않는 것도 의미가 있다.예를 들어 같은 뜻의 단어jump,leap,hop을 조회하고 있습니다.너는 이 동의어들이 몇 번이나 나타났는지 신경 쓸 필요가 없다. 왜냐하면 그들은 같은 개념을 표현했기 때문이다.실제로 그 중 하나만이 나타날 수 있다.이제 Coordination 인자를 사용하지 않는 것이 좋습니다.
GET /_search
{
"query": {
"bool": {
"disable_coord": true,
"should": [
{ "term": { "text": "jump" }},
{ "term": { "text": "hop" }},
{ "term": { "text": "leap" }}
]
}
}
}
동의어 (Synonyms 참조) 를 사용하면 내부에서 발생합니다. 다시 쓰는 검색은 동의어에 Coordination을 사용하지 않습니다.대부분의 Coordination을 사용하지 않는 용례는 자동으로 처리됩니다.너는 근본적으로 그것을 걱정할 필요가 없다.
색인 중 필드 수준 향상(Index-time Field-level Boosting)
이제 필드 승급에 대해 논의해 보겠습니다. - 다른 필드보다 이 필드가 더 중요합니다. - 조회 기간에 조회 기간 승급을 사용합니다(Query-time Boosting).색인 기간에 어떤 필드를 향상시키는 것도 가능하다.실제로 이 향상은 필드 자체가 아니라 필드의 모든 단어에 적용된다.
가능한 한 공간을 적게 차지하는 전제에서 인덱스에 인덱스 값을 저장하기 위해서, 인덱스 기간의 필드 수준 향상은 필드 길이와 함께 한 바이트로 인덱스에 저장됩니다.이것은 이전 공식에서norm(t,d)가 되돌아온 값입니다.
경고
필드 레벨 인덱스를 사용하지 않는 동안 향상된 이유는 다음과 같습니다.
이 향상과 필드 길이를 한 바이트에 저장하면 필드 길이가 데이트 손실 정밀도를 의미합니다.결과적으로 ES는 세 단어가 포함된 필드와 다섯 단어가 포함된 필드를 구분할 수 없습니다
색인을 수정하는 동안 향상시키기 위해서 모든 문서에 대해 색인을 다시 해야 합니다.조회 기간의 향상은 조회에 따라 다를 수 있다..
만약 색인을 사용하는 동안 향상된 필드가 다수치 필드(Multivalue Field)라면, 향상된 필드는 모든 값에 곱셈 동작을 해서 이 필드의 권한이 급등합니다
쿼리 기간 향상(Query-time Boosting)은 간단하고 간결하며 유연합니다.
검색 귀약, Coordination 및 인덱스 기간 향상을 설명했습니다. 이제 관련도 계산에 가장 유용한 도구인 검색 기간 향상에 대해 토론할 수 있습니다.
쿼리 기간 향상(Query-time Boosting)
검색 서브문장 우선순위 조정(Prioritizing Clauses) 부분에서, 검색 기간에 boost 파라미터를 사용하여 검색 서브문장에 권한을 추가하는 방법을 소개했습니다.예:
GET /_search
{
"query": {
"bool": {
"should": [
{
"match": {
"title": {
"query": "quick brown fox",
"boost": 2
}
}
},
{
"match": {
"content": "quick brown fox"
}
}
]
}
}
}
조회 기간 향상은 관련도를 조정하는 주요 도구이다.모든 종류의 조회는 boost 매개 변수를 받아들입니다.boost를 2로 설정하는 것은 단순히 최종적인_score 배가;정확한 승급치는 규범화와 일부 내부 최적화를 거쳐 얻을 수 있다.그러나 이것은 향상치가 2인 자구가 1인 자구보다 두 배나 중요하다는 것을 의미한다.
실제로 어떤 특정한 조회 자구에 대해'정확한'승급치가 얼마나 되는지 결정할 수 있는 공식은 없다.그것은 시도를 통해 얻은 것이다.boost는 관련도 점수 중의 한 요소일 뿐이라는 것을 기억하라.그것은 다른 요소와 경쟁해야 한다.예를 들어 위의 예에서 제목 필드는 콘텐츠 필드에 비해 대충'자연스럽게'향상되었다. 이 향상은 필드 길이 귀약 (Field-length Norm) 에서 나온 것이다. (제목은 일반적으로 관련 내용보다 짧기 때문에) 어떤 필드가 향상되어야 한다고 맹목적으로 향상시키지 마라.승급치를 적용한 후 얻은 결과를 검사하고 수정합니다.
색인 올리기(Boosting an Index)
여러 색인에서 검색할 때 indices_boost 매개 변수는 전체 인덱스를 향상시킵니다.다음 예제에서는 최근 인덱스의 문서에 더 많은 권한을 부여합니다.
GET /docs_2014_*/_search
{
"indices_boost": {
"docs_2014_10": 3,
"docs_2014_09": 2
},
"query": {
"match": {
"text": "quick brown fox"
}
}
}
이 다중 색인 검색(Multi-index Search)은 docs_로 모든 것을 조회합니다.2014_시작 색인.색인 docs_2014_10의 문서 승급값은 3, 인덱스 docs_2014_09의 문서는 2이고 다른 인덱스의 문서는 기본값 1입니다.
t.getBoost()
이러한 향상 값은 Lucene의 Practical Scoring Function에서 t.getBoost () 요소를 통해 표현됩니다.승급은 DSL이 조회되는 곳에서 적용되는 것이 아니다.반대로 어떤 승급치도 합병되어 모든 단어에 전달된다.t.getBoost () 방법은 단어 자체에 적용되는 승급값이나 상부 조회에 적용되는 승급값을 되돌려줍니다.
TIP
실제로 읽기 해석 API는 위의 설명보다 출력 자체가 더 복잡합니다.설명에서 boost 값이나 t.getBoost () 를 전혀 볼 수 없습니다.승급은 특정 단어에 적용되는queryNorm에 융합되었다.비록 우리가queryNorm는 모든 단어에 대해 같다고 말했지만, 향상된 단어에 대해queryNorm은 좀 더 높을 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.