2017-01-06 2 views
1

Ich hoffe, jemand kann mit der Syntax für eine einfache Abfrage von ElasticSearch in einem Laravel-Controller helfen.Wie Abfrage ElasticSearch in Laravel Controller

Ich habe es geschafft, zu einer Blade-Vorlage in der Ansicht zu indizieren und auszugeben, aber ich kann das Abfragerecht nicht erhalten, um die Suchformularvariable zu aktivieren, um eine Suche nach meinen Seed-Daten durchzuführen.

Suchmethode von der Steuerung:

public function searchPlugins() { 

    $client = Elasticsearch\ClientBuilder::create()->build(); 

    $query2 = Request::input('query2'); 

    $params = [ 
     'index' => 'partnerpages', 
     'type' => 'plugins', 
     'body' => [ 
      'query' => $query2['query2'] 
     ] 
    ]; 

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

    return View::make('search2')->with('plugins', $plugins); 
} 

Ich kann einfach nicht die Abfrage im params Array richtig machen - ich konnte es nur für ein bestimmtes Feld und Keyword Ausganges.

Jede Hilfe sehr geschätzt, danke im Voraus.

EDIT

-Code zur Ausgabe in der Ansicht in meiner Klinge Vorlage:

<!-- Search engine --> 
      <div class="col-md-8"> 

       {{ Form::open(array('route' => 'search-plugins2', 'class' => 'form')) }} 

       {{ Form::input('search', 'query2', Input::get('query2', ''))}} 
       {{ Form::submit('Search plugins') }} 

       {{ Form:: close() }} 

      </div><!-- end of Search engine --> 

      <div class="col-md-8"> 

       <!-- insert Search engine --> 
       <br/> 
       <h1>Plugin results</h1> 
       <br/> 


       <div class="panel panel-default"> 
        <div class="panel-body"><h2></h2> 
        <div><?php print_r($plugins);?></div> 
        <div></div> 
        <div><small></small></div> 
       </div> 
        </div> 
      </div><!-- end of row --> 

Antwort

1

Sie müssen die Abfrage mit den query DSL konstruieren. Sie können mit dem query_string query wie folgt beginnen:

$params = [ 
    'index' => 'partnerpages', 
    'type' => 'plugins', 
    'body' => [ 
     'query' => [ 
      'query_string' => [ 
       'query' => $query2['query2'] 
      ] 
     ] 
    ] 
]; 
+0

Dank @val, ich den Fehler bekommen "Illegal String-Offset 'query2'", die ich verstehen, bedeutet, ich versuche, auf den Wert zuzugreifen eines Arrays mit einem Schlüssel, der nicht existiert, dh query2. Wenn ich die Abfrage hart Code dann gut. Ich füge den Code aus der Ansicht hinzu, wenn da ein Problem ist ?? – pfeatherstone

+0

Nur mit der Variable 'query' => $ query2 funktionierte - großartig! Danke nochmal Val. Immer noch Probleme beim Ausgeben des Arrays in einer foreach-Schleife. Vielleicht, weil es ein mehrdimensionales Array ist, habe ich auf print_r zurückgegriffen. – pfeatherstone

+0

Froh, dass es geholfen hat! – Val

0

Gerade einschließlich der Variable in Form von 'query' => $ query2 für mich gearbeitet. Danke nochmal, Val, dass du mich in die richtige Richtung gelenkt hast.

EDIT

Mit aktualisiertem Code:

public function searchPlugins() { 

     $client = Elasticsearch\ClientBuilder::create()->build(); 

     $query2 = Input::get('query2', 'RSS'); 

     $params = [ 
    'index' => 'partnerpages', 
    'type' => 'plugins', 
    'body' => [ 
     'query' => [ 
      'query_string' => [ 
       'query' => $query2 
      ] 
     ] 
    ] 
]; 

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

     return View::make('search2')->with('plugins', $plugins); 
    } 
+0

Dies ist KEINE Antwort. Dies sollte ein Kommentar sein. Bitte löschen Sie dies und machen Sie einen Kommentar zu der gegebenen Antwort @val - ODER, wenden Sie dies auf eine VOLLSTÄNDIGE Antwort an, die den von Ihnen verwendeten Code demonstriert. –

+0

haben Code hinzugefügt, siehe oben – pfeatherstone