2.X/2. Search in Depth

2-6-05. Not Quite Not

drscg 2017. 9. 24. 19:26

A search on the Internet for "Apple" is likely to return results about the company, the fruit, and various recipes. We could try to narrow it down to just the company by excluding words like pietartcrumble, and tree, using a must_not clause in a bool query:

인터넷에서 "Apple" 을 검색하면, 회사(company), 과일(fruit) 그리고 다양한 조리법(recipes)에 대한 결과를 반환할 것이다. bool query에서 must_not 절을 사용하여, pietartcrumble, 그리고, tree 같은 단어를 제외하고, 회사(company)만으로 그 결과를 좁히려고 할 수 있다.

GET /_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "text": "apple"
        }
      },
      "must_not": {
        "match": {
          "text": "pie tart fruit crumble tree"
        }
      }
    }
  }
}

But who is to say that we wouldn’t miss a very relevant document about Apple the company by excluding tree or crumble? Sometimes, must_not can be too strict.

그러나, tree 나 crumble 을 제외함으로써, Apple 이라는 회사에 대한 매우 관련 있는 document를 놓치지 않을까? 때로는, must_not 은 지나치게 엄격할 수 있다.

boosting Queryedit

The boosting query solves this problem. It allows us to still include results that appear to be about the fruit or the pastries, but to downgrade them—to rank them lower than they would otherwise be:

boosting query는 이 문제를 해결한다. 여전히 과일이나 페이스트리 에 대한 결과도 포함한다. 그러나 다른 것들보다 순위를 떨어뜨린다.

GET /_search
{
  "query": {
    "boosting": {
      "positive": {
        "match": {
          "text": "apple"
        }
      },
      "negative": {
        "match": {
          "text": "pie tart fruit crumble tree"
        }
      },
      "negative_boost": 0.5
    }
  }
}

It accepts a positive query and a negative query. Only documents that match the positive query will be included in the results list, but documents that also match the negative query will be downgraded by multiplying the original _score of the document with the negative_boost.

positive query와 negative query가 있다. positive query에 일치하는 document만 결과 목록에 포함될 것이다. 그러나, negative query에 일치하는 document도, document의 원래 _score 에negative_boost 를 곱해 순위를 떨어뜨려 일치시킨다.

For this to work, the negative_boost must be less than 1.0. In this example, any documents that contain any of the negative terms will have their _score cut in half.

이렇게 동작하려면, negative_boost 는 1.0 보다 작아야 한다. 위의 예에서, negative 단어를 포함하는 모든 document는, _score 가 절반이 될 것이다.


'2.X > 2. Search in Depth' 카테고리의 다른 글

2-6-03. Query-Time Boosting  (0) 2017.09.24
2-6-04. Manipulating Relevance with Query Structure  (0) 2017.09.24
2-6-06. Ignoring TF/IDF  (0) 2017.09.24
2-6-07. function_score Query  (0) 2017.09.24
2-6-08. Boosting by Popularity  (0) 2017.09.24