We have problems related to time range search/filter in Lucene 4.0.0. We have indexed some tweets, and now we want to collect the tweets sent by a specific user in a specific time range. When we run the related query using the created filter, we obtain tweets out of specified time range. E.g. In the example below, we were not expecting to have the "exp tweet" since its timeStamp is less than lowerBound.
Can you give us any suggestion on how to perform this task, or what are the problems in our code?
Regards
Related Code
// time range, format "yyyyMMddHHmmss"
String upperBoundStr = 20110126024422;
String lowerBoundStr = 20110126021422;
String tweetTimeStr = 20110126022922;
//create filter
Filter lowerFilter = new QueryWrapperFilter( TermRangeQuery.newStringRange("creationTime",lowerBoundStr,tweetTimeStr,true,false));
Filter upperFilter = new QueryWrapperFilter( TermRangeQuery.newStringRange("creationTime",tweetTimeStr,upperBoundStr,false,true));
Filter[] filters = new Filter[2];
filters[0] = lowerFilter;
filters[1] = upperFilter;
Filter chainFilter = new ChainedFilter(filters, ChainedFilter.OR);
// search
Query luceneQuery = new TermQuery(new Term("username", "userName1"));
SimpleFSDirectory index = new SimpleFSDirectory(new File("lucene_index"));
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
ScoreDoc[] hits = searchFilteredQuery(luceneQuery, searcher,chainFilter,maxNumberOfNewTweets);
List<RankResult> filteredtweets = convertHitsToRankResults(hits, searcher);
Example Output (Format: date dateIn("yyyyMMddHHmmss") userName)
base tweet: Wed Jan 26 02:29:22 VET 2011 20110126022922 userName1
exp tweet: Tue Jan 25 20:05:02 VET 2011 20110125200502 userName1