I am trying to perform a date range search directly on the Lucene index generated by Atlassian Jira. Following this guide, I hva ended up building my query in the following manner:
Which gives the Lucene query:
customfield_10106:[2010-01-10-00-00-00 TO 2020-12-10-00-00-00]
However, this search yields no results, due the format DateTime values stored in the Lucene index.
How should I write my query to search these encoded dates?
Examples of indexed data:
The DateTime values are stored as shown in the following picture from Luke:
A closeup of the DateTime values stored:
Here is what the first result looks like from the IntelliJ debugger:
JIRA stores dates in Lucene as the number of seconds since the Epoch (1 January 1970) in Lucene long prefix-coded format.
When viewing these values in Luke, use the 'Long (prefix-coded)' option under 'Show content as:' to show this value:
Programatically, using the JIRA API, you can use LuceneUtils.dateToString() or stringToDate() to go the other way. Or using the Lucene API, you can interpret the string value as a number of seconds by using NumericUtils.prefixCodedToLong() or longToPrefixCoded().
Try making a TermRangeQuery with lowerTerm and upperTerm filled in using LuceneUtils.dateToString().
Thank you for the thorough explanation! Using the LuceneUtils.dateToString(someDate) worked like a charm. Thanks! :-)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
For future reference, here how I ended up making the range query. Thanks to Peter!
private Query getSampleRangeQuery() {
Date lower = new GregorianCalendar(2017, Calendar.AUGUST, 1).getTime();
Date upper = new GregorianCalendar(2017, Calendar.SEPTEMBER, 31).getTime();
return new TermRangeQuery("customfield_10106", LuceneUtils.dateToString(lower), LuceneUtils.dateToString(upper), true, true);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.