2016-08-28 7 views
7

でなければなりません渡されたオブジェクトの数が、私は次のエラー弾性検索私は弾性検索について学んでいると私は<a href="https://www.adictosaltrabajo.com/tutoriales/primeros-pasos-elasticsearch/" rel="noreferrer">the next tutorial</a>を、次の午前にも

Exception in thread "main" java.lang.IllegalArgumentException: The number of object passed must be even but was [1] 
at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:451) 
at elastic.elasti.App.lambda$0(App.java:55) 
at java.util.ArrayList.forEach(ArrayList.java:1249) 
at elastic.elasti.App.indexExampleData(App.java:53) 
at elastic.elasti.App.main(App.java:45) 

を取得するには、あなたは私がそれをしてください修正する助けてもらえますか?

public class App 
{ 
    public static void main(String[] args) throws TwitterException, UnknownHostException 
    { 
    System.out.println("Hello World!"); 
    List 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(); 
    indexExampleData(client, tweetJsonList, index); 
    searchExample(client); 
} 
public static void indexExampleData(Client client, List tweetJsonList, String index) { 


    BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); 

    tweetJsonList.forEach((jsonTweet) -> { 
     bulkRequestBuilder.add(new IndexRequest(index, "tweets_juan") 
       .source(jsonTweet)); 
    }); 

    BulkResponse bulkItemResponses = bulkRequestBuilder.get(); 
} 




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

    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()); 
    } 
} 

答えて

6

概要:

  1. JSONオブジェクトは、ジャクソンのようなものを使用することにより、インデックス
  2. いずれかの文字列化あなたのJSONのソースとして使用したり、地図
  3. としてソースを設定することはできません

ジャクソン:

文字列stringifiedJson = objectMapper.writeValueAsString(jsonObject)

1

あなたはJSONコンテンツを管理し、このエラーが発生するorg.jsonライブラリを使用する場合は、この方法(skgeminiがhis answerに提案されているように地図としてソースを設定)、それを解決することができます:

JSONObject dataAsJson = new JSONObject(dataAsJsonFormattedString); 
HashMap<String, Object> dataAsMap = new HashMap<String, Object>(dataAsJson.toMap()); 
bulkRequestBuilder.add(new IndexRequest(index, "tweets_juan").source(dataAsMap, XContentType.JSON)); 
関連する問題