In Prioritizing Clauses, we explained how you could use the boost
parameter at search time to give one query clause more importance than another. For instance:
Prioritizing Clauses에서, 어떤 query 절이 다른 것보다 더 중요하다는 의미로, 검색 시에 boost
매개변수를 사용하는 방법을 설명한 바 있다. 예를 들면,
GET /_search { "query": { "bool": { "should": [ { "match": { "title": { "query": "quick brown fox", "boost": 2 } } }, { "match": { "content": "quick brown fox" } } ] } } }
Query-time boosting is the main tool that you can use to tune relevance. Any type of query accepts a boost
parameter. Setting a boost
of 2
doesn’t simply double the final _score
; the actual boost value that is applied goes through normalization and some internal optimization. However, it does imply that a clause with a boost of 2
is twice as important as a clause with a boost of 1
.
query시 가중치 는, relevance를 조정하는데 사용할 수 있는, 주요 tool이다. 모든 형태의 query는 boost
매개변수를 가질 수 있다. boost
를 2
로 설정하는 것이 단순히 최종 _score
를 두 배로 만드는 것이 아니다. 실제로 적용되는 가중치 값은 정규화와 약간의 내부 최적화를 통해 처리된다. 그러나, boost 2
를 가진 절은 boost 1
을 가진 절의 두 배만큼 중요하다는 의미를 가진다.
Practically, there is no simple formula for deciding on the "correct" boost value for a particular query clause. It’s a matter of try-it-and-see. Remember that boost
is just one of the factors involved in the relevance score; it has to compete with the other factors. For instance, in the preceding example, the title
field will probably already have a "natural" boost over the content
field thanks to the field-length norm (titles are usually shorter than the related content), so don’t blindly boost fields just because you think they should be boosted. Apply a boost and check the results. Change the boost and check again.
사실상, 특정 query 절을 위한 "올바른" 가중치 값을 결정하는, 간단한 수식은 없다. 그것은 적용 후 검토(try-it-and-see)의 문제이다. 가중치(boost)
는 relevance score에 포함된 요소 중 하나일 뿐이라는 것을 기억하자. 그것은 다른 요소들과 함께 완성되어야 한다. 예를 들어, 위의 예제에서, 아마도 title
field는, field-length norm때문에, 이미 content
field 이상의 "자연스러운" 가중치를 가질 것이다. title은 일반적으로 관련된 content보다 더 짧기 때문이다. 그래서, 가중치를 부여해야 한다는 생각 때문에, 맹목적으로 field에 가중치를 부여해서는 안된다. 가중치를 적용하고 결과를 확인하자. 그리고 가중치를 바꾸고 다시 확인하자.
Boosting an Indexedit
When searching across multiple indices, you can boost an entire index over the others with the indices_boost
parameter. This could be used, as in the next example, to give more weight to documents from a more recent index:
여러 index를 검색하는 경우, indices_boost
매개변수를 사용하여, 다른 index 이상으로 특정 index 전체에 가중치를 부여할 수 있다. 다음 예제에서 알 수 있듯이, 이것은 더 최근인 index에 있는 document에, 더 많은 비중을 주기 위해 사용될 수 있다.
t.getBoost()edit
These boost values are represented in the Lucene’s Practical Scoring Function by the t.getBoost()
element. Boosts are not applied at the level that they appear in the query DSL. Instead, any boost values are combined and passed down to the individual terms. The t.getBoost()
method returns any boost
value applied to the term itself or to any of the queries higher up the chain.
Lucene’s Practical Scoring Function에서, 이러한 가중치 값은 t.getBoost()
요소로 나타낸다. 가중치는 query DSL에 표시되는 수준에서는 적용되지 않는다. 대신, 임의의 가중치 값은 조합되고, 개별 단어에 전달된다. t.getBoost()
메서드는, 단어 자체나 chain 위쪽의 query에 적용된, 가중치(boost)
값을 반환한다.
In fact, reading the explain
output is a little more complex than that. You won’t see the boost
value or t.getBoost()
mentioned in the explanation
at all. Instead, the boost is rolled into the queryNorm
that is applied to a particular term. Although we said that the queryNorm
is the same for every term, you will see that the queryNorm
for a boosted term is higher than the queryNorm
for an unboosted term.
사실, explain
출력을 읽는 것은, 이것보다 약간 더 복잡하다. explanation
에 언급된 가중치
값이나 t.getBoost()
를 전혀 알 수 없을 것이다. 대신, 가중치는 특정 단어에 적용된 queryNorm
을 합쳐서 하나로 만든 것이다. 비록 queryNorm
이 모든 단어에 대해 같다고 했지만, 가중치가 적용된 단어에 대한 queryNorm
은, 가중치가 적용되지 않은 단어에 대한 queryNorm
보다, 더 높다는 것을 알 수 있을 것이다.
'2.X > 2. Search in Depth' 카테고리의 다른 글
2-6-01. Theory Behind Relevance Scoring (0) | 2017.09.24 |
---|---|
2-6-02. Lucene’s Practical Scoring Function (0) | 2017.09.24 |
2-6-04. Manipulating Relevance with Query Structure (0) | 2017.09.24 |
2-6-05. Not Quite Not (0) | 2017.09.24 |
2-6-06. Ignoring TF/IDF (0) | 2017.09.24 |