2014-06-09 150 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