2017-11-30 1 views
0

Ich suche in Hybris mit Solr. Es gibt bestimmte Facettenwerte für die Kategorie, die ich von dieser spezifischen Kategorie ausschließen möchte (diese Kategorien müssen für andere Suchvorgänge sichtbar sein). Meine Solr-Abfrage lautet wie folgt:Hybris Solr - wie man bestimmte Facettenwerte beim Erstellen von SearchQueryData ausschließt

q=*:*&spellcheck=true&spellcheck.dictionary=en&spellcheck.collate=true&spellcheck.q=&fq={!tag=fk6}(type\-facet_string:ANSI)&fq=(((catalogId:"ProductCatalog") AND (catalogVersion:Online)))&start=0&rows=100&facet=true&facet.field=allCategories_string_mv&facet.field={!ex=fk0}productLine_string_mv&facet.field={!ex=fk8}style-facet_string&facet.field={!ex=fk5}price_usd_string&facet.field={!ex=fk4}allPromotions_string_mv&facet.field={!ex=fk6}type-facet_string&facet.field={!ex=fk1}size-facet_string&facet.field=categoryPath_string_mv&facet.field={!ex=fk9}availableInStores_string_mv&facet.field=category_string_mv&sort=name_sortable_en_sortabletext asc,score desc&facet.mincount=1&facet.limit=-1&facet.sort=count 

Ich habe nicht die Möglichkeit, rohe Abfrage zu verwenden. Alles, was ich verwenden kann, sind Hybris native SearchStateData und SearchQueryData. Kategoriefacet kann in die Suche einbezogen werden, aber ich muss daraus ausschließen, d. H. CategoryA und CategoryB. Gerade jetzt mein Code setzt nur den Wert in SearchQueryData als String in folgenden Weise:

":type-facet:" + type; or ":category:" + category 

ich versucht habe :category:(-\"CategoryA\"); aber es endet nicht in der endgültigen Solr-Abfrage. Kann mir jemand in die richtige Richtung zeigen?

Antwort

0

Im Back-Office von hybris Sie die Commerce Search Perspective mit der Erweiterung backofficesolrsearch installieren können.

In dieser Perspektive können Sie Facetten für die Suche im Frontend aktivieren oder deaktivieren. Suchst du danach?

Here ist die zugehörige hybris-Wiki-Seite.

+0

Ich kann nicht die Werte global deaktivieren. Es muss nur für diese Suche getan werden. – MathildaEN

0

Siehe SearchResponseFacetsPopulator und Sie können die Methode überschreiben, indem Sie benutzerdefinierte populator Erstellen

MySearchResponseFacetsPopulator:

public class MySearchResponseFacetsPopulator<FACET_SEARCH_CONFIG_TYPE, INDEXED_TYPE_TYPE, INDEXED_PROPERTY_TYPE, INDEXED_TYPE_SORT_TYPE, ITEM> 
     extends 
     SearchResponseFacetsPopulator<FACET_SEARCH_CONFIG_TYPE, INDEXED_TYPE_TYPE, INDEXED_PROPERTY_TYPE, INDEXED_TYPE_SORT_TYPE, ITEM> 
{ 

    @Override 
    public void populate(
      final SolrSearchResponse<FACET_SEARCH_CONFIG_TYPE, INDEXED_TYPE_TYPE, INDEXED_PROPERTY_TYPE, SearchQuery, INDEXED_TYPE_SORT_TYPE, SearchResult> source, 
      final FacetSearchPageData<SolrSearchQueryData, ITEM> target) 
    { 
     super.populate(source, target); 
    } 

    @Override 
    protected List<FacetData<SolrSearchQueryData>> buildFacets(final SearchResult solrSearchResult, 
      final SolrSearchQueryData searchQueryData, final IndexedType indexedType) 
    { 
     // Do your stuff here 
    } 
} 

xml:

<alias name="defaultMyCommerceSearchResponseFacetsPopulator" alias="commerceSearchResponseFacetsPopulator" /> 
     <bean id="defaultMyCommerceSearchResponseFacetsPopulator" class="com.my.facades.populators.MySearchResponseFacetsPopulator" 
      parent="defaultCommerceSearchResponseFacetsPopulator" /> 
Verwandte Themen