> I am currently having serious performance problems with
> date range queries. What I am doing, is validating a
> datasets published status by a valid_from and a valid_till
> date field.
>
> I did get a performance boost of ~ 100% by switching from a
> normal solr.DateField to a solr.TrieDateField with
> precisionStep="8", however my query still takes about 1,3
> seconds.
>
> My field defintion looks like this:
>
> <fieldType name="date" class="solr.TrieDateField"
> precisionStep="8" sortMissingLast="true"
> omitNorms="true"/>
>
> <field name="valid_from" type="date" indexed="true"
> stored="false" required="false" />
> <field name="valid_till" type="date" indexed="true"
> stored="false" required="false" />
>
>
> And the query looks like this:
> ((valid_from:[* TO 2010-04-29T10:34:12Z]) AND
> (valid_till:[2010-04-29T10:34:12Z TO *])) OR ((*:*
> -valid_from:[* TO *]) AND (*:* -valid_till:[* TO *])))
>
> I use the empty checks for datasets which do not have a
> valid from/till range.
>
>
> Is there any way to get this any faster?
I can suggest you two things.
1-) valid_till:[* TO *] and valid_from:[* TO *] type queries can be performance
killer. You can create a new boolean field ( populated via conditional copy or
populated client side) that holds the information whether valid_from exists or
not. So that valid_till:[* TO *] can be rewritten as valid_till_bool:true.
2-) If you are embedding these queries into q parameter, you can write your
clauses into (filter query) fq parameters so that they are cached.