You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Markus Jelsma <ma...@openindex.io> on 2016/11/24 13:12:35 UTC

Range query on date field

Hi - i seem to be having trouble correctly executing a range query on a date field.

The following Solr document is indexed via a unit test followed by a commit:

  <doc>
    <str name="type">view</str>
    <str name="key">test_key</str>
    <date name="time">2013-01-09T17:11:40Z</date>
  </doc>

I can retrieve the document simply wrapping term queries in a boolean query like this:

      BooleanQuery.Builder queryBuilder = new BooleanQuery.Builder();

      Query typeQuery = new TermQuery(new Term("type", "view"));
      queryBuilder.add(typeQuery, Occur.MUST);
      
      long count = searcher.get().count(queryBuilder.build());

This gets me exactly 1 in variable count. This is all fine. But i also need to restrict the query to a date, so i add a simple (or so i thought) range query!

      TermRangeQuery timeQuery = TermRangeQuery.newStringRange("time", date + "T00:00:00Z", date + "T23:59:59Z", true, true);
      queryBuilder.add(timeQuery, Occur.MUST);

But no, it doesn't work. No matter what i do, i don't get any results! Thinking there is something wrong with my range query, i even tried StandardQueryParser, nothing can go wrong if Lucene builds the query for me right?

      StandardQueryParser parser = new StandardQueryParser();
      Query q = parser.parse(type:view AND time:[" + date + "T00:00:00Z TO " + date + "T23:59:59Z]", "query");

In both cases, toString of the final query yields similar results, only the order is different. The letters T and Z are somehow lowercased by the query parser.

I feel incredible stupid so many thanks in advance!
Markus

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org