Facet filtering broke after update, set_filter_query_fields not working anymore?
-
HaikoGParticipant1 year, 7 months ago #29102
Hi,
We’ve just updated to the latest version and are running into some unexpected behavior. I hope you can help us out on this one. We came from version 21.8, now on 22.2. We run on Solr, self hosted.
In version 21.8 we added multiple query filters by using set_filter_query_fields() (see code below).
Now in version 22.2 this does not work anymore. I can see the values in the solr_client object, but it never gets added to the request to Solr.Not only are our own query filters missing from the request, the facet filters as well. They’re visible in the solr client object, but never make it to the request. After some digging around in the code I found $search_engine_client->search_engine_client_add_filter(); which I can use for my own custom work. But that won’t fix the built in facet filters.
How do I get the facet filtering working again?Code:
add_filter(WPSOLR_Events::WPSOLR_FILTER_UPDATE_WPSOLR_QUERY, 'fq_solr_query', 998, 1); function fq_solr_query(WPSOLR_Query $wpsolr_query) { $current_query = $wpsolr_query->get_filter_query_fields(); $current_query[] = '-product_type_str:variable'; $wpsolr_query->set_filter_query_fields($current_query); return $wpsolr_query; }
Solr client object (partially):
[wpsolr_query:protected] => [wpsolr_filter_query:protected] => Array ( [0] => -product_type_str:variable )
HaikoGParticipant1 year, 7 months ago #29106We add multiple query filters to the query using set_filter_query_fields().
For example we filter in_stock items only by ‘_stock_i:[1 TO *]’ or search in a few product categories only, but those queries are not included in the request. The same goes for when filtering using the facets. In this request I’m using the facet filtering, a log on the get_filter_query_fields() returnsArray ( [0] => pa_kleur-van-het-product_str:Wit )
But when you check out the request that is received by Solr, there is not mentioning of the FQ.
We did not do any customizations on the facet filters, so we expected this to keep working..{facet.field={!key%3Dproduct_cat_str+ex%3Dfct_excl_product_cat_str}product_cat_str&facet.field={!key%3Dpa_merk_str+ex%3Dfct_excl_pa_merk_str}pa_merk_str&facet.field={!key%3Dcategories_str+ex%3Dfct_excl_categories_str}categories_str&facet.field={!key%3Dpa_beeldschermdiagonaal_str+ex%3Dfct_excl_pa_beeldschermdiagonaal_str}pa_beeldschermdiagonaal_str&facet.field={!key%3Dpa_inclusief-besturingssysteem_str+ex%3Dfct_excl_pa_inclusief-besturingssysteem_str}pa_inclusief-besturingssysteem_str&facet.field={!key%3Dpa_ingebouwde-luidsprekers_str+ex%3Dfct_excl_pa_ingebouwde-luidsprekers_str}pa_ingebouwde-luidsprekers_str&facet.field={!key%3Dpa_intern-geheugen_str+ex%3Dfct_excl_pa_intern-geheugen_str}pa_intern-geheugen_str&facet.field={!key%3Dpa_kleur-van-het-product_str+ex%3Dfct_excl_pa_kleur-van-het-product_str}pa_kleur-van-het-product_str&facet.field={!key%3Dpa_processorfamilie_str+ex%3Dfct_excl_pa_processorfamilie_str}pa_processorfamilie_str&facet.field={!key%3Dpa_processormodel_str+ex%3Dfct_excl_pa_processormodel_str}pa_processormodel_str&facet.field={!key%3Dpa_resolutie_str+ex%3Dfct_excl_pa_resolutie_str}pa_resolutie_str&facet.field={!key%3Dpa_totale-opslagcapaciteit_str+ex%3Dfct_excl_pa_totale-opslagcapaciteit_str}pa_totale-opslagcapaciteit_str&facet.field={!key%3Dpa_touchscreen_str+ex%3Dfct_excl_pa_touchscreen_str}pa_touchscreen_str&facet.field={!key%3Dpa_ssd-interface_str+ex%3Dfct_excl_pa_ssd-interface_str}pa_ssd-interface_str&facet.field={!key%3Dpa_aansluiting_str+ex%3Dfct_excl_pa_aansluiting_str}pa_aansluiting_str&json.nl=flat&fl=id,PID,type,meta_type_s,title,numcomments,comments,displaydate,displaymodified,*categories_str,author,*post_thumbnail_href_str,*post_href_str,snippet_s,_stock_str,_stock_i,shop_thumbnail_url,_thumbnail_id_i,_visibility_str,permalink,post_status_s,sku,ERP_productnr_s,pricelist_ids,product_type_str,content,score,_price_f&start=0&q.op=AND&f.pa_inclusief-besturingssysteem_str.facet.sort=index&sort=_stock_i+desc&fq={!tag%3Dfct_excl_type}type:(“product”)&fq=-post_status_s:(“draft”+OR+”pending”+OR+”trash”+OR+”future”+OR+”private”+OR+”auto-draft”)&fq=(((*:*+-product_visibility_str:*))+OR+(-product_visibility_str:(exclude-from-catalog)))&fq=(*:*+-is_excluded_s:[*+TO+*])+OR+is_excluded_s:(n)&rows=48&q=(*)&defType=edismax&omitHeader=true&qf=pa_model_t^10+pa_merk_t^10+title^10+_sku_t^10+product_cat_str^3+content+ean_code_str+pa_ean-code_str+pa_frequentie-van-processor_str+pa_geheugencapaciteit_str+pa_harde-schijf-omvang_str+pa_opslagcapaciteit_str+pa_compatibele-producten_str^0.1+_product_attributes_str^0.2+pa_beeldschermdiagonaal_str+pa_capaciteit_str+pa_intern-geheugen_str+pa_interne-opslagcapaciteit_str+pa_interne-ram_str+pa_maximale-beeldresolutie_str+pa_maximale-opslagcapaciteit_str+pa_maximale-resolutie_str+pa_maximum-resolutie_str+pa_opslag-schijfgrootte_str+pa_opslagcapaciteit-harde-schijf_str+pa_processorfamilie_str+pa_processormodel_str+pa_projector-native-resolution_str+pa_resolutie_str+pa_schermgrootte_str+pa_schermgrootte-display_str+pa_schermresolutie-tablet_str+pa_standaardcapaciteit_str+pa_totale-opslagcapaciteit_str+pa_type-processor_str&stats=true&facet.mincount=1&wt=json&facet=true&stats.field={!ex%3Dfct_excl__price_f}_price_f}
HaikoGParticipant1 year, 7 months ago #29120I simply added an error_log(print_r($wpsolr_query,1)); to the start of execute_wpsolr_query() in /wpsolr-pro/wpsolr/core/classes/engines/class-wpsolr-abstractsearchclient.php
That shows the filter is being added to the query object:
[wpsolr_filter_query:protected] => Array
(
[0] => pa_kleur-van-het-product_str:Wit
)I’ve enabled request logging in Solr to see the request that is received by Solr and that does not have this filter. It does filter on the selected product_cat_str, post_type, post_status_s
We have collected all customizations in one single file which we have disabled during these tests, so I’m sure nothing interferes with the plugin defaults. We also do not run any caching on our development server.
wpsolrKeymaster1 year, 7 months ago #29124Then, you’ll have to debug the code unfortunately.
You can start from method search_engine_client_add_filter_term() in file wpsolr-pro/wpsolr/core/classes/engines/solarium/class-wpsolr-searchsolariumclient.phpCheck that your filters are called in that method.
You must be logged in to reply to this topic.