ezfind
ezfind copied to clipboard
EZP-26630: Support per-query raw filters
https://jira.ez.no/browse/EZP-26630
In eZ Find, all filters expect to follow the pattern field:value. If you don't have a colon, ezfeZPSolrQueryBuilder::getParamFilterQuery() prepends a colon, effectively breaking some filters. This prevents you from adding special filters for the "fq" parameter in Solr, such as frange queries:
http://solr.pl/en/2011/05/30/quick-look-frange/
An example use case is to enforce a minimum relevance score:
{!frange l=1}query({!edismax v=$q})
You can get around this by using RawFilterList in ezfind.ini, but that's applied to every query.
This proposed solution would add a new parameter "raw_filter" to the ezfind/search fetch function:
'raw_filter', array( '{!frange l=1\}query({!edismax v=$q\})' ),
Ping @moismailzai @benkmugo
+1 this looks good to me.
I can confirm this patch is functional and works well in practice (that is, the filter range is limiting results as expected).
The flexibility this adds is a good improvement I think. It avoids having to use workarounds or going via the raw solr fetch in template land.
+1
+1 (apart from remark)
I don't like that the parameters filter
and raw_filter
take an array for the value. I think it will combine multiple array elements with a logical AND
. That's something not very obvious for a developer.
But that's how the parameter filter
was developed and raw_filter
is now consistent to that approach - so I'm OK with it.
Maybe we add inline doc saying something about how multiple array entries are handled.
+1
I think adding a brief inline doc note about those two parameter values would be a good idea.
@pkamps @benkmugo I've added additional comments where the filters are built
+1
Let's get this merged!