ElasticSearch 조회 제5편: 볼 조회

18363 단어
ElasticSearch 쿼리 디렉토리 탐색:
  • ElasticSearch 쿼리 제1편: 검색 API
  • ElasticSearch 조회 제2편: 문서 업데이트
  • ElasticSearch 조회 제3편: 단어 조회
  • ElasticSearch 쿼리 4편: 일치 쿼리(Match)
  • ElasticSearch 조회 제5편: 볼 조회

  •  
    볼 조회는 여러 개의 조회 조건을 한데 묶을 뿐만 아니라 조회의 결과와 결과의 평점을 한데 묶는 데 가장 자주 사용되는 조합 조회이다.조회 조건이 여러 개의 표현식의 조합일 때 볼 조회는 매우 유용하다. 실제로 볼 조회는 여러 개의 하위 조회 조합(combine)을 하나의 볼 표현식으로 하고 모든 하위 조회 간의 논리적 관계는 (and)이다.ElasticSearch 엔진은 한 문서가 볼 조회의 모든 하위 조회 조건을 충족시킬 때만 이 문서가 조회 조건을 충족한다고 생각합니다.볼 조회가 지원하는 하위 조회 유형은 모두 네 가지가 있는데, 각각:must,should,must_not 및 filter:
  • must 자구: 문서는must 조회 조건과 일치해야 합니다
  • should 자구: 문서는 should 자구 조회의 하나 이상과 일치해야 합니다
  • must_not 자구: 문서는 이 조회 조건과 일치할 수 없습니다
  • 필터 서브문장: 필터, 문서는 반드시 이 필터 조건과 일치해야 한다.must 서브문장과 유일한 차이점은 필터가 조회의 score에 영향을 주지 않는다는 것이다

  • 일반적인 경우,should 자구는 여러 개의should 자 조회를 포함하는 수조 필드이며, 기본적으로 일치하는 문서는 그 중의 한 자 조회 조건을 만족시켜야 한다.질의가 기본 일치 동작을 변경해야 하는 경우 질의 DSL은 부울 질의의 매개변수 minimum_를 명시적으로 설정해야 합니다.should_match의 값, 이 매개 변수는 문서에 일치해야 하는should 서브 쿼리의 수량을 제어합니다. 브릴 쿼리 문장을 만났습니다. should 서브 문장에 두 개의 쿼리가 포함되어 있습니다. 매개 변수를 설정하지 않으면minimum_should_match, 기본값은 0입니다.부울 조회에서 설정 매개 변수 minimum_ 보이기should_match 값입니다.
    주: 볼 조회의 네 개의 자구는 모두 그룹 필드일 수 있기 때문에 논리 조작을 끼워 넣는 조회를 지원합니다.
    예를 들어 다음 should 조회에 대해 문서는 should 자구의 두 개 이상의 단어 조회를 만족시켜야 한다.
    "should" : [
            {  "term" : { "tag" : "azure" } },
            {  "term" : { "tag" : "elasticsearch" } },
            {  "term" : { "tag" : "cloud" } }
        ],
    "minimum_should_match" : 2

    볼 조회의 각 자구 간의 논리적 관계는 (and) 이다. 이것은 한 문서가 모든 조회 자구를 동시에 만족시킬 때만 이 문서가 조회 조건과 일치하고 결과로 되돌아온다는 것을 의미한다.
    볼 조회에서 조회 결과에 대한 필터는 필터 (filter) 자구와 must_를 사용하는 것을 권장합니다이 두 자구는 필터 상하문(Filter Context)에 속하고 필터 자구를 자주 사용하여 ElasticSearch 엔진이 자동으로 데이터를 캐시합니다. 캐시된 데이터를 다시 검색할 때 검색 성능을 향상시킬 수 있습니다.필터 상하문은 조회의 평점에 영향을 주지 않기 때문에 평점 계산은 검색을 복잡하게 하고 더 많은 CPU 자원을 소모하기 때문에 filter와must_not 검색은 검색 작업 부하를 줄일 수 있습니다.
    1. 컨텍스트 조회 및 필터링
    부울 조회에서 조회는Query Context와 Filter Context로 나뉘며, 조회 상하문은query 매개 변수로 지정되고, 필터 상하문은filter와must_not 매개변수 지정.이 두 질의 상하문의 유일한 차이점은 Filter Context가 질의의 평점(score)에 영향을 주지 않는다는 것이다.부울 조회에서 Filter 매개변수 및must_not 매개 변수는 Filter Context를 사용하고must와should는Query Context를 사용하며 Filter Context를 자주 사용하면 엔진이 자동으로 데이터를 캐시하여 조회 성능을 향상시킵니다.
    GET _search
    {
      "query": { 
        "bool": { 
          "must": [
            { "match": { "title":   "Search"        }}, 
            { "match": { "content": "Elasticsearch" }}  
          ],
          "filter": [ 
            { "term":  { "status": "published" }}, 
            { "range": { "publish_date": { "gte": "2015-01-01" }}} 
          ]
        }
      }
    }

    상기 조회 요청에 대해must 자구는query context에 있고, filter 자구는filter context에 있습니다.
  • querycontext에서must 자구는 일치하는 (match) 조회를 충족시키는 문서를 되돌려줍니다
  • filtercontext에서 filter 자구는 필터로 단어 조회와 범위 조회 조건을 만족시키지 않는 문서를 필터하고 일치하는 문서의 score에 영향을 주지 않습니다

  • 둘째, 볼 조회 자구의 논리적 관계
    볼 조회에서 각 자구 간의 논리적 관계는 (and) 와 이다.단일 자구에 대해 하나의 문서가 이 자구의 조회 조건을 만족시키면 되돌아오는 논리적 결과는true이고,should 자구에 대해서는 일반적으로 여러 개의 자구 조회 조건을 포함합니다. 매개 변수 minimum_should_match 제어 문서는should 자구의 하위 검색 조건의 수량을 만족시켜야 합니다. 문서가 지정한 수량의should 검색 조건을 만족시킬 때만should 자구가 되돌아오는 논리적 결과는true입니다.
    {
        "bool" : {
            "must" : {
                "term" : { "user" : "kimchy" }
            },
            "filter": {
                "term" : { "tag" : "tech" }
            },
            "must_not" : {
                "range" : {
                    "age" : { "from" : 10, "to" : 20 }
                }
            },
            "should" : [
                {  "term" : { "tag" : "wow" } },
                {  "term" : { "tag" : "elasticsearch" } }
            ],
            "minimum_should_match" : 1
        }
    }

    상기 볼 조회에서should 자구에 두 개의 단어 조회가 포함되어 있습니다. 인자 minimum_should_match의 값은 1입니다. 따라서 임의의 단어 조회 조건을 안정적으로 충족시키면 should 자구가 일치하여 논리 결과true를 되돌려주고 다른 자 조회와 논리 연산을 합니다. 이 문서가 모든 자 조회 조건을 충족시킬 때만 검색 결과로 클라이언트로 되돌려줍니다.
    3, 볼 조회 예시 분석
    1, 부울 조회를 사용하여 간단한 논리 조회를 실현
    다음 예제에서는 부울 질의의 연산 논리를 분석합니다.
  • must 자구와 should 자구 간의 논리적 관계는 and이다
  • must 자구는 일치하는 검색을 포함하고 필드 이벤트name는 스타일 단어를 포함해야 합니다
  • should 자구는 하나의 수조로 두 개의 일치 조회를 포함하고 문서가 일치해야 하는 자구 조회 조건의 수량은 매개 변수minimum_should_match 제어;
  • 매개 변수 minimum_should_match의 값은 1입니다. 이것은 문서가 임의의 검색 서브문장을 만족시키면should 서브문장과 일치한다는 것을 의미합니다
  • {  
       "query":{  
          "bool":{  
             "must":{  
                "match":{  "eventname":"style" }
             },
             "should":[  
                { "match":{ "eventname":"google" } },
                { "match":{  "eventname":"aws" }}
             ],
             "minimum_should_match":1
          }
       }
    }

    위의 분석을 통해 다음 필드 값은 조회 조건을 충족합니다.
  • "eventname": "Google style map"
  • "eventname": "AWS Game Day ~ Seattle Style!"

  • 2, 부울 조회를 사용하여 복잡한 그룹 조회를 실현
    복잡한 그룹 조회, 예를 들어 (A and B) or (C and D) or (E and F), 볼 조회를 should 자구의 하위 조회로 사용:
    {
      "_source": "topics",
      "from": 0,
      "size": 100,
      "query": {
        "bool": {
          "should": [
           {
              "bool": {
                "must": [
                  { "term": { "topics": 1}  },
                  { "term": { "topics": 2}  }
                ]
              }
            },
            {
              "bool": {
                "must": [
                  {"term": { "topics": 3 } },
                  {"term": { "topics": 4}}
                ]
              }
            }
          ],
          "minimum_should_match": 1
        }
      }
    }

     
     
    참조 문서:
    Elasticsearch Reference [2.4] » Query DSL » Compound queries » Bool Query

    좋은 웹페이지 즐겨찾기