2016-03-18 58 views
0

我有這段代碼執行查詢。 我使用的是官方的php彈性搜索庫。 https://github.com/elastic/elasticsearch-php彈性搜索PHP客戶端日期範圍查詢

字段 「Tijdsperiode」 是格式爲:(2016年1月30日00:00:00)(YY-MM-DD HH:MM:SS)

$params = [ 
    'index' => 'veenendaal2', 
    'type' => 'passanten2', 
    'body' => [ 
     'query' => [ 
     'match_all' => [], 
     'filter' => [ 
      'range' => [ 
      'Tijdsperiode' => [ 
       'gte' => '2016-01-30 01:00:00', 
       'lte' => '2016-01-30 08:00:00' 
      ] 
      ] 
     ] 
     ], 
    ], 
    ]; 

    $response = $client->search($params); 

    var_dump($response); 

我只是想知道在兩個日期之間得到結果需要什麼樣的格式。

當我這樣做:

$params = [ 
    'index' => 'veenendaal2', 
    'type' => 'passanten2', 
    'body' => [ 
     'query' => [ 
      'match_all' => [], 
     ], 
    ], 
    ]; 

它的正常工作,但我需要2個日期之間的結果!

我也試過,但沒有結果:

$json = '{ 
    "query": { 
     "bool": { 
     "must": [ 
       { 
        "range": { 
        "Tijdsperiode": { 
        "gt": "2016-01-30 07:00:00", 
        "lt": "2016-01-30 09:00:00" 
        } 
        } 
       } 
      ] 
     } 
    } 
}'; 

    $client = ckan_graphmapper_client(); 

    $params = [ 
    'index' => 'veenendaal2', 
    'type' => 'passanten2', 
    'body' => $json 
    ]; 

    $response = $client->search($params); 

我也映射試了一下:

$params = [ 
    'index' => 'veenendaal2', 
    'type' => 'passanten2', 
    'size' => $size, 
    'body' => [ 
     'query' => [ 
     "match_all" => [], 
     'filter' => [ 
      'range' => [ 
      'Tijdsperiode' => [ 
       'gte' => '2016-01-30 01:00:00', 
       'lte' => '2016-01-30 08:00:00' 
      ] 
      ] 
     ] 
     ], 
     'mappings' => [ 
     '_default_' => [ 
      'properties' => [ 
      'Tijdsperiode' => [ 
       'type' => 'date', 
       'format' => 'yyyy-MM-dd HH:mm:ss' 
      ] 
      ] 
     ] 
     ] 
    ] 
    ]; 

如何做正確的語法2日之間進行選擇?兩種字符串格式(2016-01-30 00:00:00)(YY-MM-DD HH:MM:SS)

謝謝!

+0

您在映射設置該日期格式? –

+0

嗨Veerendra,我添加了我的類型,但它仍然不工作..任何想法? –

+0

'datetime'=> [ ]'type'=>'date', 'format'=>'yyyy-MM-dd HH:mm:ss', ] –

回答

0

因此,事實證明我的數據導入不是正確的方式。 日期字段被識別爲字符串值。

當我finnaly有彈性的正確映射我能做到這一點查詢:

$query = [ 
    'query' => [ 
     'filtered' => [ 
     'query' => [ 
      'match_all' => [] 
     ], 
     'filter' => [ 
      'range' => [ 
      'Tijdsperiode' => [ 
       'gte' => $start, 
       'lte' => $end 
      ] 
      ] 
     ] 
     ] 
    ] 
    ];