2016-10-27 6 views
-1

Это запрос, который выбрасывает исключение, используя ES 2.0:BOOL запрос не поддерживает фильтр

bool query does not support filter 

Как использовать Exists и недостающее запрос?

Запрос:

{ 
    "bool":{ 
     "must":[ 
     { 
      "bool":{ 
       "should":[ 
        { 
        "bool":{ 
         "must":[ 
          { 
           "range":{ 
           "startDate":{ 
            "lte":"2016-10-27T11:24:49.6616538+05:30" 
           } 
           } 
          } 
         ], 
         "filter":[ 
          { 
           "bool":{ 
           "must_not":[ 
            { 
             "exists":{ 
              "field":"endDate" 
             } 
            } 
           ] 
           } 
          } 
         ] 
        } 
        } 
       ] 
      } 
     } 
     ] 
    } 
} 

ответ

1

Ну прежде всего, эта ошибка, как правило, от использования в версии 1.x от Elasticsearch. (в этом случае вам понадобится FilteredQuery)

Далее появляется много уровней ненужного гнездования. Не уверен, возможно, вы разделили другие вещи, чтобы сделать более простой пример. Я переписал ваш запрос, как это (и добавил внешние скобки):

{ 
    "query" : { 
     "bool" : { 
      "must" : [{ 
        "range" : { 
         "startDate" : { "lte" : "2016-10-27T11:24:49.6616538+05:30" } 
        } 
       } 
      ], 
      "filter" : [{ 
        "bool" : { 
         "must_not" : [{ 
           "exists" : { "field" : "endDate" } 
          } 
         ] 
        } 
       } 
      ]} } 
} 

как ваш первоначальный запрос, и мой переписан один отлично работает на моем сервере (V2.3.1), поэтому я предполагаю, что на самом деле у вас есть ES 1 .Икс ?

Кроме того, если вы не усиливая Lucene счет, а просто хотите вернуть документы (или применить свой собственный сорт), то вы можете оставить фильтр в целом и упростить его дальше:

{ 
    "query" : { 
     "bool" : { 
      "must" : [{ 
        "range" : { 
         "startDate" : { "lte" : "2016-10-27T11:24:49.6616538+05:30"} 
        } 
       } 
      ], 
      "must_not" : [{ 
        "exists" : { "field" : "endDate" } 
       } 
      ]} } 
}