.newStream("tweets", spout)
.each(new Fields("str"), new ParseTweet(), new Fields("text", "content", "user"))
.each(new Fields("text", "content"), new TweetIdExtractor(), new Fields("tweetId"))
.project(new Fields("tweetId", "text"))
.each(new Fields("tweetId", "text"), new Print())
.partitionPersist(new ElasticSearchStateFactory(), new Fields("tweetId", "text"), new ElasticSearchStateUpdater());
/**
* Now we need a DRPC stream to query the state where the tweets are stored.
* To do that, as shown below, we need an implementation of {@link QueryFunction} to
* access our {@link ElasticSearchState}.
*/
TridentState elasticSearchState = topology.newStaticState(new ElasticSearchStateFactory());
topology
.newDRPCStream("search")
.each(new Fields("args"), new Split(" "), new Fields("keywords")) // let's split the arguments
.stateQuery(elasticSearchState, new Fields("keywords"), new TweetQuery(), new Fields("ids")) // and pass them as query parameters
.project(new Fields("ids"));