2014-06-09 183 views
1

我對Elasticsearch很新穎,所以如果這是一個明顯的問題,請致歉!Elasticsearch(PHP)多範圍過濾器問題

我正在使用PHP庫並嘗試在索引中執行相當直接的查詢。我唯一想做的事就是在創建映射時對日期類型設置兩個日期(visible_from和visible_to)的過濾器。

我建立了代碼中的一個過濾查詢,從而結束了尋找這樣的:

array (
    'index' => 'site', 
    'from' => 0, 
    'size' => 10, 
    'body' => 
    array (
    'query' => 
    array (
     'filtered' => 
     array (
     'filter' => 
     array (
      'and' => 
      array (
      'range' => 
      array (
       'visible_from' => 
       array (
       'lt' => '2014-06-09 09:06:47', 
      ), 
       'visible_to' => 
       array (
       'gt' => '2014-06-09 09:06:47', 
      ), 
      ), 
     ), 
     ), 
     'query' => 
     array (
      'match' => 
      array (
      '_all' => 'example', 
     ), 
     ), 
    ), 
    ), 
), 
) 

這導致BadRequest400Exception被拋出 - 在異常的內容我可以看到Elasticssearch是說

QueryParsingException[[site] [and] filter does not support [lt]] 

如果我刪除和過濾,只是針對其中一個日期,執行範圍過濾器,那麼它完美的作品,我只是無法得到它與工作和過濾

在此先感謝您的幫助!

回答

3

試試下面的查詢,試着用不同的小於和大於日期。

array 
(
    "query" => array 
    (
    "filtered" => array 
    (
     "query" => array 
     (
      "match" => array(
       '_all' => 'example', 
       ), 
      ), 

      "filter" => array 
      (
       "and" => array 
       (
        "filters" => array 
        (
         "0" => array 
         (
          "range" => array 
          (
           "ID" => array 
           (
           "gt" => '2014-06-09 09:06:47', 
           ), 
          ), 
         ), 
         "1" => array 
         (
          "range" => array 
          (
           "ID" => array 
           (
            "lt" => '2014-06-09 09:06:47', 
           ), 
          ), 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
) 
+0

這是非常有益的,謝謝。我不得不用'ID'替換我的屬性,但是使用了filters數組。非常感謝! – alexdover

+0

很高興知道它適合你:)你可以使用'visible_to'和'visible_from'以及它將工作。在我的例子中'ID'是一個字段名稱。 – Roopendra