1

현재 부모님은이 문서와 관련된 탄성 검색 (문서) 및 하위 (의견)에 색인되어 있습니다. 첫 번째 목적은 하위 쿼리를 기반으로 N 개 이상의 의견이 포함 된 문서를 검색하는 것이 었습니다. 여기에 내가했던 방법입니다 ElasticSearch의 하위 빈도에 의한 필터

documents/document/_search 
{ 
    "min_score": 0, 
    "query": { 
     "has_child" : { 
      "type" : "comment", 
      "score_type" : "sum", 
      "boost": 1, 
      "query" : { 
       "range": { 
        "date": { 
         "lte": 20130204, 
         "gte": 20130201, 
         "boost": 1 
        } 
       } 
      } 
     } 
    } 
} 

내가 문서를 가지고 주석의 양을 계산하는 점수를 사용하고 내가 "min_score"을 사용하여,이 금액으로 문서를 필터링. 이제 내 목표는 설명뿐 아니라 문서와 관련된 여러 하위 문서를 항상 빈도를 기준으로 검색하는 것입니다. 쿼리와 비슷한 것 :

documents/document/_search 
{ 
    "query": { 
     "match_all": { 
     } 
    }, 
    "filter" : { 
     "and" : [{ 
      "query": { 
       "has_child" : { 
        "type" : "comment", 
        "query" : { 
         "range": { 
         "date": { 
          "lte": 20130204, 
          "gte": 20130201 
         } 
         } 
        } 
       } 
      } 
     }, 
     { 
     "or" : [ 
      {"query": { 
       "has_child" : { 
        "type" : "comment", 
         "query" : { 
          "match": { 
          "text": "Finally" 
         } 
        } 
       } 
       } 
      }, 
      { "query": { 
       "has_child" : { 
        "type" : "comment", 
         "query" : { 
          "match": { 
          "text": "several" 
         } 
        } 
       } 
       } 
      } 
     ] 
     } 
    ] 
    } 
} 

위의 쿼리는 정상적으로 작동하지만 처음에는 주파수에 기반하여 필터링하지 않습니다. 점수가 계산되기 전에 필터가 계산되므로 min_score를 사용하여 각 하위 쿼리를 필터링 할 수 없습니다.

이 문제를 해결할 수있는 방법은 있습니까?

답변

3

필터와 관련된 점수가 전혀 없습니다. 전체 로직을 쿼리 파트로 이동하고 bool query을 사용하여 서로 다른 쿼리를 결합하는 것이 좋습니다.

+0

하지만 bool 쿼리는 (조건 A AND (조건 B OR 조건 C)와 같은) 문장을 쓰지 못하게합니다. – mvallebr

+0

여러 개의 중첩 bool 쿼리를 사용하면 확실합니다. 외부 조건에는 conditionB와 conditionC가있는 should 절만있는 두 개의 must 절인 conditionA와 추가 bool 쿼리가 있습니다. 말이된다? 그것은 다른 사고 방식 일 뿐이지 만 동일한 행동을 취할 수 있습니다. – javanna

+0

사실 당신은 맞습니다, bool 쿼리는 논리를 할 수 있습니다 ... Mas 개별적으로 점수를 필터링하는 방법? – mvallebr