2016-08-25 2 views
0

Ich verwende Elasticsearch 2.3 zusammen mit dem offiziellen PHP-Treiber. Die updateByQuery gibt mir Probleme, in PHP zu verwenden. Eine kleine Hilfe, wie man es benutzt, wird geschätzt.Update durch Abfrage (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); 

Grundsätzlich möchte ich Felder (Name, Preis) ein paar Dokument aktualisieren, die eine bestimmte Abfrage entspricht

Danke.

+0

Siehe oben, ich habe einen Beispielcode (ich sehe nicht, warum es notwendig war, weil alles, was ich fragte, war ein Beispielcode oder eine klare Dokumentation und ich könnte es von dort nehmen). Wer auch immer dies abgelehnt hat, bitte geben Sie einen Grund an. –

Antwort

0

Also, mit Hilfe der Funktionsweise der CURL api habe ich es geschafft, einen Weg zu finden.

Zuerst müssen Sie Ihre elasticsearch.yml bearbeiten, um Scripting zu ermöglichen. Fügen Sie die folgenden Zeilen am Ende an.

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

Dort können Sie Batch-Updates mit Abfragen wie im folgenden Beispiel starten.

$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); 

Das ist es. Es ist nicht einfach und gut dokumentiert ab sofort so.