2015-09-09 3 views
0

Я читаю свои запросы из своей базы данных, и я добавляю некоторый фильтр в java-стороне, но код не работает. Я прочитаю часть между звездами из моей базы данных. Извините за плохой английский. как я могу заставить его работать, мой запрос:elasticsearch вложенные запросы

{ 
    "from": 0, 
    "size": 100, 
    "query": { 
    "filtered": **{ 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "text": { 
        "query": "xxx", 
        "slop": 0 
       } 
       } 
      }, 
      { 
       "match": { 
       "text": { 
        "query": "xbxxı", 
        "slop": 0 
       } 
       } 
      } 
      ], 
      "minimum_should_match": 1, 
      "boost": 1.0 
     } 
     } 
    }**, 
    "query": { 
     "myFilter": { 
     "filter": { 
      "bool": { 
      "must": [ 
       { 
       "range": { 
        "date": { 
        "gt": "2015-09-08", 
        "lte": "2015-09-09" 
        } 
       } 
       }, 
       { 
       "query": { 
        "match": { 
        "page": "1" 
        } 
       } 
       }, 
       { 
       "range": { 
        "xxxx": { 
        "gt": "0.0" 
        } 
       } 
       } 
      ] 
      } 
     } 
     } 
    } 
    } 
} 

ответ

1

Отфильтрованный загружается из базы данных является допустимым, однако проблема заключается в запросе можно определить за пределы **.

"query": { 
    "myFilter": { 
    "filter": { 
     "bool": { 
     "must": [ 
      { 
      "range": { 
       "date": { 
       "gt": "2015-09-08", 
       "lte": "2015-09-09" 
       } 
      } 
      }, 
      { 
      "query": { 
       "match": { 
       "page": "1" 
       } 
      } 
      }, 
      { 
      "range": { 
       "xxxx": { 
       "gt": "0.0" 
       } 
      } 
      } 
     ] 
     } 
    } 
    } 
} 

Если вы хотите использовать этот фильтр, вы определили его сразу после «запроса» внутри вашего фильтра.

{ 
"from": 0, 
"size": 100, 
"query": { 
    "filtered":** { 
     "query": { 
     ... 
     }**, 
     "filter": { 
     "bool": { 
      "must": [ 
       { 
        "range": { 
        "date": { 
         "gt": "2015-09-08", 
         "lte": "2015-09-09" 
        } 
        } 
       }, 
       { 
        "query": { 
         "match": { 
          "page": "1" 
         } 
        } 
       }, 
       { 
        "range": { 
         "xxxx": { 
          "gt": "0.0" 
         } 
        } 
       } 
       ] 
      } 
     } 
     } 
    } 
} 
+0

Я знаю, что это работает. но запрос, который я получаю из базы данных, является формальным запросом, так что последняя паранезия, которая имеет закрытие отфильтрованной части, поэтому фильтр будет размещен вне стороны запроса. Я хочу решение для этого. –