2.X/2. Search in Depth

2-4-5. Proximity for Relevance

drscg 2017. 9. 24. 21:51

Although proximity queries are useful, the fact that they require all terms to be present can make them overly strict. It’s the same issue that we discussed in Controlling Precision in Full-Text Search: if six out of seven terms match, a document is probably relevant enough to be worth showing to the user, but the match_phrase query would exclude it.

proximity query가 유용하지만, 모든 단어가 존재해야 한다는 사실은, 너무 엄격하다. Full-Text Search의 Controlling Precision에서 이야기했던 것과 동일한 이슈이다. 7개의 단어 중 6개가 일치한다면, 그 document는 아마도 사용자에게 보여줄 만큼 충분히 관련이 있다. 그러나, match_phrase query는 그 document를 제외한다.

Instead of using proximity matching as an absolute requirement, we can use it as a signal—as one of potentially many queries, each of which contributes to the overall score for each document (see Most Fields).

절대적인 요구사항인 근접 일치를 사용하는 대신에, 그것을, 잠재적으로 많은 query 중의 하나인, signal 로 사용할 수 있다. 이들 각각은 각 document에 대한 전체 score에 기여한다. Most Fields를 참조하자.

The fact that we want to add together the scores from multiple queries implies that we should combine them by using the bool query.

다수의 query에서 score를 모두 추가할 수 있다는 사실은, bool query를 사용하여, 그들 query를 조합할 수 있다는 의미이다.

We can use a simple match query as a must clause. This is the query that will determine which documents are included in our result set. We can trim the long tail with the minimum_should_matchparameter. Then we can add other, more specific queries as should clauses. Every one that matches will increase the relevance of the matching docs.

간단한 match query를 must 절로 사용할 수 있다. 이것은 어떤 document가 결과 집합에 포함되느냐를 결정하는 query이다. minimum_should_match 매개변수를 사용하여 불필요한 결과를 정리할 수 있다. 그리고, 다른 더 많은 특정한 query를 should 절로 추가할 수 있다. 일치하는 모든 것은, 일치하는 document의 relevance를 증가시킬 것이다.

GET /my_index/my_type/_search
{
  "query": {
    "bool": {
      "must": {
        "match": { 
          "title": {
            "query":                "quick brown fox",
            "minimum_should_match": "30%"
          }
        }
      },
      "should": {
        "match_phrase": { 
          "title": {
            "query": "quick brown fox",
            "slop":  50
          }
        }
      }
    }
  }
}

must 절은 결과집합에 document를 포함하거나 제외시킨다.

should 절은 일치하는 document의 relevance score를 증가시킨다.

We could, of course, include other queries in the should clause, where each query targets a specific aspect of relevance.

물론, should 절에 다른 query를 포함시킬 수 있다. 그들 각 query는 relevance의 특정 측면을 겨냥한다.

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

2-4-3. Multivalue Fields  (0) 2017.09.24
2-4-4. Closer Is Better  (0) 2017.09.24
2-4-6. Improving Performance  (0) 2017.09.24
2-4-7. Finding Associated  (0) 2017.09.24
2-5. Partial Matching  (0) 2017.09.24