2015-05-13 2 views
0

Я создал индекс под названием «testindex» и три типа, называемые type1, type2, type3. Мне нужны данные фильтра из этих трех типов. Я так отфильтровал.Несколько типов в запросе Elasticsearch Запросить только для определенных типов

GET testindex/type1,type2,type3/_search 
{"query":{ 
    "filtered":{ 
     "query":{ 
      "match_phrase_prefix":{"title":"c"} 
     }, 
     "filter":{ 
      "bool":{ 
       "must":[ 
        { 
         "term":{ 
          "status": "1" 
         }  
        } 
        ] 
      } 

     } 

    } 

} 

Это прекрасно работает, но проблема 3тип не Статуса поля. Мне нужно рассмотреть фильтр только для type1 и type2, а не для type3. Мне нужна помощь, чтобы решить эту проблему.

+0

Что вы подразумеваете под «type3» не имеет поля статуса. Мне нужно рассмотреть фильтр только для type1 и type2 not для type3 "? Если поле' status' не существует для type3, что вы ожидаете? –

ответ

3

Один из способов сделать это, чтобы использовать or фильтр, который будет в основном выбрать:

  • либо документы типа test1 или test2, имеющие status = 1
  • или документы типа test3, без условия на status поле

Этот запрос должен работать:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "match_phrase_prefix": { 
      "title": "h" 
     } 
     }, 
     "filter": { 
     "or": [ 
      { 
      "bool": { 
       "must": [ 
       { 
        "term": { 
        "status": "1" 
        } 
       }, 
       { 
        "terms": { 
        "_type": [ 
         "test1", 
         "test2" 
        ] 
        } 
       } 
       ] 
      } 
      }, 
      { 
      "term": { 
       "_type": "test3" 
      } 
      } 
     ] 
     } 
    } 
    } 
} 
Смежные вопросы