The Elasticsearch query DSL is immensely flexible. You can move individual query clauses up and down the query hierarchy to make a clause more or less important. For instance, imagine the following query:
Elasticsearch의 query DSL은 매우 유연하다. 개별 query 절을, 절의 중요도에 따라, query 계층 구조의 위아래로 옮길 수 있다. 예를 들어, 아래 query를 가정해 보자.
quick OR brown OR red OR fox
We could write this as a bool
query with all terms at the same level:
이것을, 모든 단어를 동일한 수준으로 하는, bool
query를 사용해서, 아래와 같이 작성할 수 있다.
GET /_search { "query": { "bool": { "should": [ { "term": { "text": "quick" }}, { "term": { "text": "brown" }}, { "term": { "text": "red" }}, { "term": { "text": "fox" }} ] } } }
But this query might score a document that contains quick
, red
, and brown
the same as another document that contains quick
, red
, and fox
. Red and brown are synonyms and we probably only need one of them to match. Perhaps we really want to express the query as follows:
그러나, 이 query는, quick
, red
, brown
을 포함하는 document와, quick
, red
, fox
을 포함하는 다른 document의 score가 같을 것이다. red 와 brown 은 동의어이고, 둘 중 하나라도 일치하는 document를 원한다면, 다음과 같이 query를 표현할 수 있다.
quick OR (brown OR red) OR fox
According to standard Boolean logic, this is exactly the same as the original query, but as we have already seen in Combining Queries, a bool
query does not concern itself only with whether a document matches, but also with how well it matches.
표준 boolean logic에 따르면, 이것은 원래의 query와 정확히 일치한다. 그러나, query의 조합에서 이미 보았듯이, bool
query는 document가 일치하느냐 여부뿐만 아니라, 얼마나 잘 일치하는가 에도 관여한다.
A better way to write this query is as follows:
이 query를 작성하는 더 나은 방법은 아래와 같다.
GET /_search { "query": { "bool": { "should": [ { "term": { "text": "quick" }}, { "term": { "text": "fox" }}, { "bool": { "should": [ { "term": { "text": "brown" }}, { "term": { "text": "red" }} ] } } ] } } }
Now, red
and brown
compete with each other at their own level, and quick
, fox
, and red OR brown
are the top-level competitive terms.
이제, red
와 brown
은 그들 자신의 수준에서 서로 비교를 하고, quick
, fox
그리고 red OR brown
은 최상위의 비교 단어들이다.
We have already discussed how the match
, multi_match
, term
, bool
, and dis_max
queries can be used to manipulate scoring. In the rest of this chapter, we present three other scoring-related queries: the boosting
query, the constant_score
query, and the function_score
query.
match
, multi_match
, term
, bool
그리고 dis_max
query가 score를 조정하는데 사용될 수 있는 방법에 대해 이미 이야기했다. 이 장의 나머지 부분에서, score 계산과 관련된 3개의 다른 query(boosting
, constant_score
, function_score
query)를 검토해 보자.
'2.X > 2. Search in Depth' 카테고리의 다른 글
2-6-02. Lucene’s Practical Scoring Function (0) | 2017.09.24 |
---|---|
2-6-03. Query-Time Boosting (0) | 2017.09.24 |
2-6-05. Not Quite Not (0) | 2017.09.24 |
2-6-06. Ignoring TF/IDF (0) | 2017.09.24 |
2-6-07. function_score Query (0) | 2017.09.24 |