2016-08-28 2 views
1

Ich lerne über elastische Suche und ich folge the next tutorial. In diesem Tutorial werden Twittern von Twiter als Beispieldaten verwendet. Methode tweetJsonList gibt ein Beispiel zurück. Ich versuche, dies im Index "tweets_juan" zu speichern und "tweet" einzugeben. Die Anwendung läuft ohne Probleme, aber wenn ich alle Dokumente mit (http://localhost:9200/tweets_juan/tweet/_search?q=:) suche, finde ich nichts. Könnten Sie mir bitte helfen zu überprüfen, was hier passiert?Elastische Suche und Twitter Datenbeispiel

public class App 
{ 
@SuppressWarnings("unchecked") 
public static void main(String[] args) throws TwitterException, UnknownHostException 
{ 
    System.out.println("Hello World!"); 
    List<String> tweetJsonList = searchForTweets(); 

    Client client = TransportClient.builder().build() 
      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 
    String index = "tweets_juan"; 
    client.admin().indices() 
        .create(new CreateIndexRequest(index)) 
        .actionGet(); 
    save(client, tweetJsonList, index); 
    searchExample(client); 
} 

public static void save(Client client, List<String> tweetJsonList, String index) { 

    BulkRequestBuilder bulkRequestBuilder = client.prepareBulk().setRefresh(true); 
    for (String data : tweetJsonList) { 
     String indexName = index; 
     String typeName = "tweet"; 

     String json = new Gson().toJson(data); 
     System.out.println("Juan Debug:" + data); 
     bulkRequestBuilder.add(client.prepareIndex(indexName, typeName).setSource(json)); 
    } 
    bulkRequestBuilder.execute().actionGet(); 
} 


public static void searchExample(Client client) { 
    BoolQueryBuilder queryBuilder = QueryBuilders 
      .boolQuery() 
      .must(termsQuery("text", "Baloncesto")); 

    SearchResponse searchResponse = client.prepareSearch("tweets_juan") 
      .setQuery(queryBuilder) 
      .setSize(25) 
      .execute() 
      .actionGet(); 
    } 

public static List searchForTweets() throws TwitterException { 
    Twitter twitter = new TwitterFactory().getInstance(); 
    Query query = new Query("mundial baloncesto"); 
    List tweetList = new ArrayList<>(); 
    for (int i = 0; i < 10; i++) { 
     QueryResult queryResult = twitter.search(query); 
     tweetList.addAll(queryResult.getTweets()); 
     if (!queryResult.hasNext()) { 
      break; 
     } 
     query = queryResult.nextQuery(); 
    } 
    Gson gson = new Gson(); 

    return (List) tweetList.stream().map(gson::toJson).collect(Collectors.toList()); 
} 
} 
+0

Try Sarching nach Typen auf der Suche einstellen. '' Client.prepareSearch ("tweets_juan") setTypes ("Tweet") .setQuery (Querybuilder) .setSize (25) .execute() .actionGet(); '' – ryanlutgen

+0

@ryanlutgen nur ich versuche das, aber ich bekomme nichts – Juan

Antwort

0

Sie müssen mehr Informationen eingeben, bevor jemand Ihre Frage beantworten kann.

Da Sie keine explizite Zuordnung verwenden, müssen Ihre Felder standardmäßig analysiert werden. So wird Ihr Textfeld in mehrere Begriffe aufgeteilt.

  1. Verwenden Sie die Abfrage "alle abgleichen", um zu sehen, welche Daten indiziert wurden.
  2. Termabfrage wird für die exakte Übereinstimmung verwendet (einschließlich des exakten Falls) und Sie versuchen, die Termabfrage auf einem analysierten Feld "text" auszuführen, das nicht funktioniert.
  3. Versuchen Sie mit Übereinstimmung oder Übereinstimmung der Wortgruppe Abfrage in das Textfeld und sehen Sie, ob Sie ein Ergebnis zurück erhalten.