2016-08-28 8 views
1

私は弾性検索について学んでおり、私はthe next tutorialに従っています。このチュートリアルでは、Twiterのツイートをサンプルデータとして使用しています。メソッドtweetJsonListはサンプルデータを返します。私はこれをインデックス "tweets_juan"に保存して、 "tweet"と入力しようとしています。アプリケーションは問題なく実行されますが、(http://localhost:9200/tweets_juan/tweet/_search?q=)を使用してすべてのドキュメントを検索すると、何も見つかりませんでした。ここで何が起きているか確認してください。弾性検索とTwitterデータの例

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

検索でタイプを設定した後sarching試してみてください: '' client.prepareSearch( "tweets_juan")setTypes( "つぶやき") .setQuery(queryBuilder) .setSize(25) .execute() .actionGet。 (); '' – ryanlutgen

+0

@ryanlutgenちょうど私がそれを試みているが、何も得られない – Juan

答えて

0

あなたの質問に誰かが答える前に、詳細を入力する必要があります。

明示的なマッピングを使用していないため、フィールドはデフォルトで分析されている必要があります。テキストフィールドは複数の用語にトークン化されます。

  1. 「すべて一致」クエリを使用して、どのデータがインデックスされているかを確認します。
  2. 完全一致(完全一致を含む)に用語クエリが使用され、分析されたフィールド「テキスト」を使用して用語クエリを実行しようとしていますが、これは機能しません。
  3. テキストフィールドで一致または一致するフレーズクエリを使用して、結果が戻ってくるかどうかを確認してください。