We have code that uses *SolrIndexSearcher#getDocList()* method to get
document IDs for the query.

First a Solr query string is generated from UI, then the following code
creates a Lucene Query

    org.apache.lucene.search.Query query = parser.parse(solrQueryString);

where parser is org.apache.lucene.queryparser.classic.QueryParser and then
the following is used to get the document IDs:

    DocList docList = indexSearcher.getDocList(query, filterList, sort,
start, length, 0);

The code worked perfectly in Solr 4.5. Now, in Solr 5.5.4, it works only if
the query does not contain a date range query. For example, solrQueryString:

"(+c_class:(Industry.government)) AND +valid_date:[2015-10-21 TO
2017-04-21] AND -class:(TitleCodeMiddle.Board) AND +company:[* TO *] AND
+(has_email:(true) OR has_phone:(true) OR c_has_phone:(true)) AND
+c_class:(Industry.government)"

was parsed to the Lucene query:

"+(+c_class:industry.government) +valid_date:[2015-10-21 TO 2017-04-21]
-class:titlecodemiddle.board +company:[* TO *] +(has_email:T has_phone:T
c_has_phone:T) +c_class:industry.government"

which contains "+valid_date:[2015-10-21 TO 2017-04-21]", returns ZERO
results, although the same query (actually the Solr equivalent) returns
3326 records when used in Solr Admin.

Here is the definition of the "valid_date" field:

   <field name="valid_date" type="tdate" indexed="true" stored="false" />

   <fieldType name="tdate" class="solr.TrieDateField"
sortMissingLast="true" precisionStep="6" positionIncrementGap="0"
omitNorms="true"/>

For a similar query without the range query:

+(+c_class:industry.government) -class:titlecodemiddle.board +company:[* TO
*] +(has_email:T has_phone:T c_has_phone:T) +c_class:industry.government

our code returns 5629 results (same as Solr Admin).

I tried to use different formats for date in the Solr query (according to
what I was able to find on the web for Lucene date format):

   - "+valid_date:[2015-10-21 TO 2017-04-21]"
   - "+valid_date:[20151021 TO 20170421]"
   - "+valid_date:[2015-10-21T04:00:00.000 TO 2017-04-21T04:00:00.000]"
   - "+valid_date:[2015-10-21T04:00:00.000Z TO 2017-04-21T04\:00\:00]"
   - "+valid_date:[2015-10-21T00:00:00Z TO 2017-04-21T00:00:00Z]"

Just out of curiosity, I even generated "+valid_date:[XXX TO XXX]" just to
see that SolrIndexSearcher#getDocList() method does not check for correct
syntax and returns ZERO results.

Does anybody know what is happening and what is the proper date format for
Lucene range query in v. 5.5.4?

Thanks,

Victor

Reply via email to