2015-05-13 17 views
6

media_url == '' || media_url == null olan belgeleri denetlemek istiyorum. Ben yukarıda ne yaparsak boş ayarlanır kayıtlar iade olmaz, sonra BununlaElasticSearch: Dize alanının null veya boş olduğu sorgu nasıl yazılır?

{ 
    "engagements": [ 
     "blah" 
    ], 
    "query": { 
     "from": 0, 
     "size": 2, 
     "sort": [ 
      { 
       "bookmarked": { 
        "order": "desc" 
       } 
      }, 
      { 
       "created_at": { 
        "order": "desc" 
       } 
      } 
     ], 
     "facets": {}, 
     "query": { 
      "filtered": { 
       "query": { 
        "match_all": {} 
       }, 
       "filter": { 
        "bool": { 
         "must": [ 
          { 
           "term": { 
            "car_id": "78778" 
           } 
          }, 
          { 
           "range": { 
            "created_at": { 
             "gte": "2015-04-12T04:00:00.000Z", 
             "lte": "2015-05-13T03:59:59.999Z" 
            } 
           } 
          }, 
          { 
           "term": { 
            "media_url": "" 
           } 
          } 
         ], 
         "should": [ 
          { 
           "term": { 
            "bookmarked": false 
           } 
          } 
         ] 
        } 
       } 
      } 
     }, 
     "aggregations": { 
      "word_frequencies": { 
       "terms": { 
        "field": "text", 
        "size": 150 
       } 
      } 
     }, 
     "highlight": { 
      "fields": { 
       "text": { 
        "fragment_size": 1500 
       } 
      } 
     } 
    }, 
    "api": "_search" 
} 

: Ben bir sorgu var. Kayıtları media_url değeri olarak '' veya null '' ile döndürmek için ne yapmalıyım?

cevap

4

Belki de "veya" filtresini kullanmayı deneyebilirsiniz. http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html

{ 
    "or": [ 
    { 
     "term": { 
     "media_url": "" 
     } 
    }, 
    { 
     "term": { 
     "media_url": null 
     } 
    } 
    ] 
} 

Düzenleme: Sen boş değer veya alanın bakmak missing filter kullanabilirsiniz

{ 
    "engagements": [ 
     "blah" 
    ], 
    "query": { 
     "from": 0, 
     "size": 2, 
     "sort": [ 
     { 
      "bookmarked": { 
       "order": "desc" 
      } 
     }, 
     { 
      "created_at": { 
       "order": "desc" 
      } 
     } 
     ], 
     "facets": {}, 
     "query": { 
     "filtered": { 
      "query": { 
       "match_all": {} 
      }, 
      "filter": { 
       "bool": { 
        "must": [ 
        { 
         "term": { 
          "car_id": "78778" 
         } 
        }, 
        { 
         "range": { 
          "created_at": { 
           "gte": "2015-04-12T04:00:00.000Z", 
           "lte": "2015-05-13T03:59:59.999Z" 
          } 
         } 
        }, 
        { 
         "or": [ 
          { 
           "term": { 
           "media_url": "" 
           } 
          }, 
          { 
           "term": { 
           "media_url": null 
           } 
          } 
         ] 
        } 
        ], 
        "should": [ 
        { 
         "term": { 
          "bookmarked": false 
         } 
        } 
        ] 
       } 
      } 
     } 
     }, 
     "aggregations": { 
     "word_frequencies": { 
      "terms": { 
       "field": "text", 
       "size": 150 
      } 
     } 
     }, 
     "highlight": { 
     "fields": { 
      "text": { 
       "fragment_size": 1500 
      } 
     } 
     } 
    }, 
    "api": "_search" 
} 
+0

Merhaba, bunu tam olarak nerede sorgu dizilim içine yerleştirirdim ?? – Edmund

+0

Cevabımı güncelledim, örnek belge ve haritalama ile sorunun nasıl gittiğini veya güncelleştirildiğini bildirin. – phuc77

+0

Doğru cevap "media_url" yerine "missing: {" field ":" media_url "}' kullanıyordu: null', ama yine de neredeyse doğru olduğundan cevabınızı kabul edeceksiniz! Teşekkürler!! – Edmund

3

İşte tam sorgu var (denenmemiş Ben bir örnek belge/index sahip olmadıklarından şablon) kendisi eksik. İstediğinizi elde etmek için aynı boş bir dize ile birleştirebilirsiniz.

{ 
    "or": [ 
    { 
     "term": { 
     "media_url": "" 
     } 
    }, 
    { 
     "missing": { 
     "field": "media_url" 
     } 
    } 
    ] 
} 

senin Boole filtrenin mutlaka yan tümcesinde "MEDIA_URL" için yerine tek terim sorgu yukarıda kullanın.

+0

Yeh bu işe yaradı! – Edmund

+1

Eksik filtre var, erm, o zamandan beri eksik gitti. – doctorlove

+0

@doctorlove İşaretlediğiniz için teşekkürler. Aynı sorgunun "must_not" ifadesi altında var olan –

İlgili konular