As we all know SAP Hybris works with Apache SOLR to provide enhanced product search
capabilities and there are some features that are supported by the SOLR but not supported
by Hybris.
So, this article will tell about
- SOLR NOT query in Hybris
- Multi-Line Exact Search with provided order
- SOLR Query with POST method in Hybris
SOLR NOT query in Hybris
Suppose we have scenario where we don’t want to show specific product for specific
condition on listing page/search page
we don’t want to show product whose color is black or we don’t want to show
specific product to specific customer.
In SOLR you can simply achieve this by specifying NOT or ~ in a FQ (Filtered Query) like
FQ = ~color : BLACK
OR
FQ = NOT color : BLACK
But if you want to achieve same in Hybris you need to add this is in the filter query
and at the end SolrQueryConverter will convert SearchQuery to SolrQuery and this will send
to the SOLR to retrieve Product from SOLR.
But the problem is when you append “Not” OR “~” in the Filtered Query the
SolrQueryConverter will covert “~ to \~” and “NOT to NOT\+” because it escape query
character’s from query and hence you will not get result because query which will be passed
like “FQ = \~color : BLACK” or “FQ = NOT\+color : BLACK” so to overcome with this problem
you need to override SolrQueryConverter and don’t escape query character form Filter
Query Field on which you want apply not condition.
Multi-Line Exact Search with provided order
Requirement:
User can provide multiple product code and SOLR should return result in a same
order provided by user.
Solution:
As we know it was easily achievable by implementing own
CommerceSearchTextPopulator but the only tricky part is that the result should come in
same order as provided by the user.
Because each product (document in term of SOLR) having its score and this is
defined at the indexing time and because of this scoring factor you will not get result in a
same order as provided by user.
To overcome with this problem dynamic scoring is applied while sending query to
the SOLR. And to support more than 500+ product search in a single SOLR query we used
POST Method for sending query. Below I have explained how to use SOLR query with POST
method in Hybris
SOLR query with POST method in Hybris
OOTB the box Hybris uses GET method to send query to SOLR Server However, SOLR
also supports POST requests for select queries. If you use complex SOLR queries with lots of
facets and/or Filter Queries where the total length of your query string can exceed the limits
of servlet containers then SOLR will throw error and you will not get expected result.
And hence we can use post method to send query to the SOLR server and to achieve
this in Hybris we need to override FacetSearchStrategy and pass method as a POST with
SOLR query.
e.g.
solrClient.query(solrQuery, METHOD.POST);