I am learning about elastic search and I am following the next tutorial, but I get the next error
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)
Could you help me to fix it please?
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());
}
}
For instance, when using conflicting versions of Elasticsearch, you may get error messages such as “Elasticsearch java client initialization fails” or “\Common was unexpected at this time.”
You can retrieve these stats using the indices stats API . (Optional, integer) Maximum number of documents to collect for each shard. If a query reaches this limit, Elasticsearch terminates the query early. Elasticsearch collects documents before sorting. Use with caution. Elasticsearch applies this parameter to each shard handling the request.
Elasticsearch collects documents before sorting. Use with caution. Elasticsearch applies this parameter to each shard handling the request. When possible, let Elasticsearch perform early termination automatically. Avoid specifying this parameter for requests that target data streams with backing indices across multiple data tiers.
If a query reaches this limit, Elasticsearch terminates the query early. Elasticsearch collects documents before sorting. Use with caution. Elasticsearch applies this parameter to each shard handling the request.
I know it's late but the simple answer to this is adding XContentType.JSON
along with source which is available in ElasticSearch library package org.elasticsearch.common.xcontent
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,XContentType.JSON));
});
BulkResponse bulkItemResponses = bulkRequestBuilder.get();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With