2016-09-22 1 views
1

Nach der Elasticsearch Dokumentation ich die aktuelle PHP-Bibliothek dh 2.0 installiert und ich habe dieseElasticsearch ~ 2,0 php - nicht Verbindung herstellen -array bespannen Konvertierungsfehler

$hosts = [ 
    // This is effectively equal to: "https://username:password!#$?*[email protected]:9200/" 
    [ 
    'host' => 'foo.com', 
    'port' => '9200', 
    'scheme' => 'https', 
    'user' => 'username', 
    'password' => 'password!#$?*abc' 
    ], 

    // This is equal to "http://localhost:9200/" 
    [ 
    'host' => 'localhost', // Only host is required 
    ] 
]; 

$client = ClientBuilder::create() // Instantiate a new ClientBuilder 
       ->setHosts($hosts) // Set the hosts 
       ->build(); 

Aber es wirft Array String Konvertierungsfehler aus die buildConnectionsFromHosts Methode. Ich kann keine Verbindung herstellen.

Ich inspiziert den Code und festgestellt, dass es keinen Code zur Verarbeitung Host in Array-Form gegeben. Ist dies der Fehler in der Bibliothek oder mir fehlt etwas?

Vielen Dank.

+0

Dies ist das Konfigurationsbeispiel aus der Dokumentation in der Elasticsearch Website zur Verfügung gestellt. Bitte schauen Sie sich das an. Http://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_configuration.html – pratikacharya

+0

Wenn Sie tatsächlich der Anleitung folgen, sieht es für mich aus, dass Sie sich öffnen eine https-Verbindung, wenn Sie keine für Ihren Host aktiviert haben. Wenn diese ** ist ** die tatsächliche Konfiguration, die Sie lokal verwenden, dann wird es nicht funktionieren, egal was, da Sie nicht in der Lage sein werden, eine elastische Suche auf foo.com –

+0

@Bjorn ich bin bewusst von dieser Tatsache und das ist Beispielkonfiguration, die ich kopierte, wie ich meine tatsächliche Konfiguration hier nicht zeigen kann. Zumindest sollte das Array-to-String-Konvertierungsfehler deswegen nicht auslösen. – pratikacharya

Antwort

3

Die Lösung

Die Taste "Passwort" in den Host-Optionen werden soll mit "pass" ersetzt. Die ClientBuilder.php Datei in der Bibliothek muss geändert werden. Der folgende Code ist nicht in der Datei elasticsearch-php 2.0 ClientBuilder.php enthalten, befindet sich jedoch in seinem Master-Zweig.

ersetzt I buildConnectionsFromHosts Methode

/** 
     * @param array $hosts 
     * 
     * @throws \InvalidArgumentException 
     * @return \Elasticsearch\Connections\Connection[] 
     */ 
     private function buildConnectionsFromHosts($hosts) 
     { 
      if (is_array($hosts) === false) { 
       $this->logger->error("Hosts parameter must be an array of strings, or an array of Connection hashes."); 
       throw new InvalidArgumentException('Hosts parameter must be an array of strings, or an array of Connection hashes.'); 
      } 

      $connections = []; 
      foreach ($hosts as $host) { 
       if (is_string($host)) { 
        $host = $this->prependMissingScheme($host); 
        $host = $this->extractURIParts($host); 
       } else if (is_array($host)) { 
        $host = $this->normalizeExtendedHost($host); 
       } else { 
        $this->logger->error("Could not parse host: ".print_r($host, true)); 
        throw new RuntimeException("Could not parse host: ".print_r($host, true)); 
       } 
       $connections[] = $this->connectionFactory->create($host); 
      } 

      return $connections; 
     } 

und normalizeExtendedHost Methode hinzugefügt

/** 
    * @param $host 
    * @return array 
    */ 
    private function normalizeExtendedHost($host) { 
     if (isset($host['host']) === false) { 
      $this->logger->error("Required 'host' was not defined in extended format: ".print_r($host, true)); 
      throw new RuntimeException("Required 'host' was not defined in extended format: ".print_r($host, true)); 
     } 

     if (isset($host['scheme']) === false) { 
      $host['scheme'] = 'http'; 
     } 
     if (isset($host['port']) === false) { 
      $host['port'] = '9200'; 
     } 
     return $host; 
    } 
Verwandte Themen