2016-06-02 12 views
0

Community: Während ich in einem Projekt mit Elasticsearch [2.3.1] arbeite, versuche ich eine einfache Anfrage an ES zu stellen, indem ich eine Java API kompiliere in einem .jar (elasticsearch.2.3.1 .jar-Datei), die ich zu meinem Projekt hinzufügen, aber wenn ich Code nächste:Elasticesearch Java API 2.3 Probleme

QueryBuilder qb = simpleQueryStringQuery("+kimchy -elasticsearch"); 

die IDE nur knapp sein Ziel reconize den Befehl "simpleQueryStringQuery (" + kimchy -elasticsearch ")", aber in jedem Beispiel in Internet und in IHM Offizielle Website erscheint in dieser Form. Was ist falsch? Danke im Voraus.

import java.net.InetAddress; 
import java.net.UnknownHostException; 

import org.elasticsearch.action.search.SearchResponse; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.transport.InetSocketTransportAddress; 
import org.elasticsearch.common.unit.TimeValue; 
import org.elasticsearch.index.query.QueryBuilder; 
import org.elasticsearch.index.query.QueryBuilders; 
import org.elasticsearch.search.SearchHit; 
import org.elasticsearch.search.sort.SortOrder; 
import org.elasticsearch.search.sort.SortParseElement; 

    public class Search { 


public static void main(String[] args) { 
    Client client; 
    Settings settings = Settings.settingsBuilder() 
      .put("client.transport.ignore_cluster_name", true).build(); 
    try { 
     client = TransportClient 
       .builder() 
       .settings(settings) 
       .build() 
       .addTransportAddress(
         new InetSocketTransportAddress(InetAddress 
           .getByName("localhost"), 9300)); 

    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    QueryBuilder qb = simpleQueryStringQuery("+kimchy -elasticsearch"); 

    SearchResponse scrollResp = client.prepareSearch("thing") 
      .addSort(SortParseElement.DOC_FIELD_NAME, SortOrder.ASC) 
      .setScroll(new TimeValue(60000)) 
      .setQuery(qb) 
      .setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll 
    //Scroll until no hits are returned 
    while (true) { 

     for (SearchHit hit : scrollResp.getHits().getHits()) { 
      //Handle the hit... 
     } 
     scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet(); 
     //Break condition: No hits are returned 
     if (scrollResp.getHits().getHits().length == 0) { 
      break; 
     } 
    } 


} 



} 

Antwort

1

Sie wissen, wie Methoden und Importe funktionieren? Der Fehler tritt auf, weil Ihre Klasse keine Methode namens simpleQueryStringQuery hat und Sie diese Methode nicht importieren.

Was Sie wirklich wollen, ist: entweder QueryBuilders.simpleQueryStringQuery("...")

verwenden oder einen statischen Import für QueryBuilders.simpleQueryStringQuery verwenden. Siehe: http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html oder https://en.wikipedia.org/wiki/Static_import

+0

Ich dachte, dass. Schließlich benutze ich das Formular, das Sie mir empfehlen. Vielen Dank. –