2014-03-05 51 views
2

我知道我怎麼能在curl中激活ttl特性,但是我不知道官方的Elasticsearch PHP庫(https://github.com/elasticsearch/elasticsearch-php)是否也支持這個特性。我已經挖掘了Lib的代碼,但無法弄清楚。官方Elasticsearch PHP模塊啓用TTL

感謝您的幫助!

+0

您是否曾嘗試在'$ params'數組中提交TTL?看看[客戶代碼](https://github.com/elasticsearch/elasticsearch-php/blob/2c06a6284e4c3ec0ad63a304b16f3698abc11094/src/Elasticsearch/Client.php#L732) – Thorsten

+0

是的,我做了...但我需要激活ttl特徵在索引中。 –

回答

0

我已經創建了我自己的方法來啓用索引類型上的ttl功能。我還提交的官方Github上回購的問題:https://github.com/elasticsearch/elasticsearch-php/issues/62

class ElasticSearchClient extends \Elasticsearch\Client { 
    public function enableTtl($params) { 
    $index = $this->extractArgument($params, 'index'); 
    $type = $this->extractArgument($params, 'type'); 
    $body = json_encode(array($type => array('_ttl' => array('enabled' => true)))); 
    /** @var callback $endpointBuilder */ 
    $endpointBuilder = $this->dicEndpoints; 

    /** @var \Elasticsearch\Endpoints\Update $endpoint */ 
    $endpoint = $endpointBuilder('Indices\Mapping\Put'); 
    $endpoint->setIndex($index) 
     ->setType($type) 
     ->setBody($body); 
    $endpoint->setParams($params); 
    $response = $endpoint->performRequest(); 
    return $response['data']; 
    } 
} 
0

嘛,恕我直言,你需要更新使用putMapping()方法elasticsearch映射。不需要特殊的方法調用。

這是一個在我們的系統中工作的例子。

$params['index'] = 'yourindexname'; 
    $params['type'] = 'yourtypename'; 

    $mapping = [ 
     '_ttl' => [ 
      'enabled' => 'true', 
      'default' => '14d', 
     ], 
     'properties' => [ 
      [... add your properties here ...] 
     ] 
    ]; 

    $params['body']['yourtypename'] = $mapping; 
    $this->getClient()->indices()->putMapping($params);