2016-08-25 12 views
0

私は弾力検索2.3公式PHPドライバを使用しています。 updateByQueryは、私がPHPで使用するのに困っている。それを使用する方法について少し助けていただければ幸いです。クエリによる更新(updateByQuery)Elasticsearch-PHP

 $client = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build(); 
     # Request 
     $updateRequest = [ 
      'index'  => 'gorocket', 
      'type'  => 'logs', 
      'body' => [ 
       'query' => [ 
        'filtered' => [ 
         'filter' => [ 
          'bool' => [ 
              'must' => 
              [ 
               [ 
                'match' => [ 'enabled' => 1 ], 
               ], 
              ] 
             ] 
            ] 
           ] 
          ] 
        ] 
      ] 
     ]; 
     # Update 
     $results = $client->updateByQuery($updateRequest); 

基本的に私は

はありがとう特定のクエリに一致する文書フィールド(名、価格)のカップルを更新したいです。

+0

上記を参照してください、私はサンプルコードを含んでいます(なぜ私は尋ねられたすべてがサンプルコードか明確な文書であり、そこからそれを取ることができるため、なぜ必要なのかわかりません)。これまで誰がダウン投票したのか理由を述べてください。 –

答えて

0

CURL APIがどのように機能するかを参考にして、私は方法を考え出しました。

まず、elasticsearch.ymlを編集して、スクリプトを許可する必要があります。最後に次の行を追加します。

script.engine.groovy.inline.search: on 
script.engine.groovy.inline.aggs: on 
script.engine.groovy.inline.update: on 

例のようにクエリを使用してバッチ更新を開始することができます。

$client = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build(); 
    # Request 
    $updateRequest = [ 
     'index'  => 'testindex', 
     'type'  => 'logs', 
     'conflicts' => 'proceed', 
     'body' => [ 
      'query' => [ 
       'filtered' => [ 
        'filter' => [ 
         'bool' => [ 
             'must' => 
             [ 
              [ 
               'match' => [ 'enabled' => 1 ], 
              ], 
             ] 
            ] 
           ] 
          ] 
         ], 
      'script' => [ 
        'inline' => 'ctx._source.enabled = value', 
        'params' => [ 
         'value' => 0 
        ] 
      ] 
      ] 
     ] 
    ]; 
    # Update 
    $results = $client->updateByQuery($updateRequest); 

これだけです。今のところそれは簡単ではなく、よく文書化されていません。