0

여러 유형으로 검색하고 있습니다. 반환 된 유형 중 하나에는 my_field라는 필드가 있습니다. 반환 된 다른 유형에는 해당 필드가 없습니다. 나는 용어가 존재하지 않는 모든 결과와 용어가 존재할 때 필드의 값이 참인 결과만을 원한다.탄성 검색 5.4 - 용어가 존재하는 경우 용어로 필터링하고 용어가 없을 때 필터링하지 않습니다.

my_field의 필터가 쿼리 점수에 기여하지 않고 필터링 만 수행하면 좋을 것입니다.

이것은 내가 가진 것만 큼입니다. 네가 나를 도울 수 있다면 나는 1 시간 동안 자기 깃발을 칠 것이다.

(이것은 잘못된 사용하지 마십시오!)

body = { 
    'query': { 
     'bool': { 
      'must': { 
       'multi_match': { 
        'query': 'pangolin', 
        'fields': ['_all', '_partials'] 
       } 
      }, 
      "should": { 
       "must_not": { 
        "exists": { 
         "field": "my_field" 
        } 
       } 
      }, 
      "should": { 
       'term': { 
        'my_field': True 
       } 
      } 
     } 
    } 
} 
+0

bool 쿼리 컨텍스트에서 필수 항목 뒤에 2 개를 입력해야하기 때문에 위의 코드는 작동하지 않습니다. docs https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-bool-query.html –

답변

0

다음 내용이 필요한 것 같습니다. 문서는 '팬 골린'과 일치해야하며 문서는 2 개로 필터링됩니다. shoulds 중 단 하나가 일치해야합니다.

https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-bool-query.html (키워드 : 필터 참조).

body = { 
    "query": { 
     'bool': { 
      'must': { 
       'multi_match': { 
        'query': 'pangolin', 
        'fields': ['_all', '_partials'] 
       } 
      }, 
      "filter": { 
       "bool": { 
        "should": [{ 
          "term": { 
           "my_field": True 
          } 
         }, 
         { 
          "bool": { 
           "must_not": { 
            "exists": { 
             "field": "my_field" 
            } 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 
0

당신이 이런 식으로 뭔가를 시도?

$ curl -XPOST localhost:9200/type1,type2/_search -d '{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "my_field": true 
      } 
     }, 
     { 
      "constant_score": { 
      "filter": { 
       "not_missing": { 
       "field": "type2.my_field" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
}' 

이 기능이 작동하는지 알려주세요. 행운을 빕니다!

+1

아침을 확인해 주셔서 감사합니다. –