Not sure if I'm doi9ng something wrong, or there is a bug somewhere but: I was trying to create a test index of a lot every second in a year and try query it (doesn't have to be time, I'm using it to explain the problem).
Example document consists of 7 fields: document.add(new IntPoint("year", year)); document.add(new IntPoint("month", month)); document.add(new IntPoint("hour", hour)); document.add(new IntPoint("day", day)); document.add(new IntPoint("minute", minute)); document.add(new IntPoint("second", second)); document.add(new StoredField("date", "y=" + year + "/m=" + month + "/d=" + day + "/h=" + hour + "/m=" + minute + "/s=" + second)); Then I tried to run range query like: BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder() .add(IntPoint.newRangeQuery("year", 2016, 2020), BooleanClause.Occur.FILTER) .add(IntPoint.newRangeQuery("month", 1, 10), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("day", 1), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("hour", 1), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("minute", 1), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("second", 1), BooleanClause.Occur.FILTER); To get all the first seconds of every hour seconds for month 1 to 10. While number of results are correct, I'm getting wrong stored fields: y=2017/m=2/d=1/h=1/m=1/s=1 y=2017/m=3/d=1/h=1/m=1/s=1 y=2017/m=1/d=2/h=1/m=26/s=42 y=2017/m=2/d=2/h=1/m=26/s=42 y=2017/m=3/d=2/h=1/m=26/s=42 y=2017/m=1/d=3/h=1/m=52/s=23 y=2017/m=2/d=3/h=1/m=52/s=23 y=2017/m=3/d=3/h=1/m=52/s=23 y=2017/m=1/d=5/h=1/m=18/s=4 As you can see months are repeating + and results are incorrect. Only 2 first results do match the query. If I remove seconds from the equation then everything is working ok. Is it something I'm doing wrong or I'm hitting some limitations? Here is the test code: import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.IntPoint; import org.apache.lucene.document.StoredField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.SimpleCollector; import org.apache.lucene.store.RAMDirectory; import java.io.IOException; public class Test { public Test() throws IOException { final RAMDirectory directory = new RAMDirectory(); IndexWriter iwriter = null; final IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer()); iwriter = new IndexWriter(directory, config); //Indexing every second for full 2017 for (int year = 2017; year <= 2017; year++) { for (int month = 1; month <= 12; month++) { for (int day = 1; day <= 31; day++) { for (int hour = 1; hour <= 1; hour++) { for (int minute = 1; minute <= 60; minute++) { for (int second = 1; second <= 60; second++) { Document document = new Document(); document.add(new IntPoint("year", year)); document.add(new IntPoint("month", month)); document.add(new IntPoint("hour", hour)); document.add(new IntPoint("day", day)); document.add(new IntPoint("minute", minute)); document.add(new IntPoint("second", second)); document.add(new StoredField("date", "y=" + year + "/m=" + month + "/d=" + day + "/h=" + hour + "/m=" + minute + "/s=" + second)); iwriter.addDocument(document); } } } } } } iwriter.close(); BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder() .add(IntPoint.newRangeQuery("year", 2016, 2020), BooleanClause.Occur.FILTER) .add(IntPoint.newRangeQuery("month", 1, 10), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("day", 1), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("hour", 1), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("minute", 1), BooleanClause.Occur.FILTER) .add(IntPoint.newExactQuery("second", 1), BooleanClause.Occur.FILTER); final IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(directory)); searcher.search(booleanQueryBuilder.build(), new SimpleCollector() { @Override public void collect(int doc) throws IOException { Document document = searcher.getIndexReader().document(doc); System.out.println(document.get("date")); } public boolean needsScores() { return false; } }); } } Thank you, Alex