SearchBundle - Sortierung Suche

Hallo zusammen,

ich stehe gerade mit dem SearchBundle und der Suche auf dem Schlauch.
Im Standard wird das Suchergebnis nach Relevanz sortiert.

SearchRankingSorting

Wenn ich nun dem $criteria über addSorting eine weitere Sorting zuordne hat dies keinen Einfluss.
Nur wenn ich Standard Sorting mit removeSorting() entferne und meine Sortierung hinzufüge hat es eine Auswirkung.

Das will ich aber nicht.

  1. Sortierung muss die Relevanz sein.
  2. Sortierung muss Ordernmber ASC sein.

 

Wo ist mein Denkfehler?
shopware/AjaxSearch.php at 5.2 · shopware/shopware · GitHub

An dieser Stelle habe ich die zweite Sortierung hinzugefügt.

Sucht man z.B. nach einer Artilenummer 70011

So erscheinen die Artikel 7001110, 7001109, 7001108 etc.
Die Relevanz ist bei den Artikel gleich.
Leider ist die Artikelnummer absteigend. Dies will ich umgrehen.

Besten Dank über eine Info?

 

Gruß
Ottscho

 

 

Hallo,

Könnten Sie bitte Ihr Code zeigen. so man kann was passiert sehen.

VG

Ahmad

Hi Ahmad,

ich habe es hinbekommen.

$rankingSortingHandler = Shopware()->Container()->get('shopware_searchdbal.search_ranking_sorting_handler_dbal');
        $newRankingSortingHandler = new \Shopware\OttSearchOrder\SearchBundleDBAL\SortingHandler\NewSearchRankingSortingHandler($rankingSortingHandler);
        Shopware()->Container()->set('shopware_searchdbal.search_ranking_sorting_handler_dbal', $newRankingSortingHandler);

 

Problem ist die Sortierung über die ID.

Warum dies an dieser Stelle eingebunden ist, ist völlig unklar. Vor allem Absteigend.

Das habe ich nun über das dekorieren gelöst.

 

 

Hallo,

kannst du bitte das Subscribe function und afterInit function und deine Dekoriertion-Class anzeigen.

VG

Ahmad.

Also @ottscho‍,

vergess letzten Kommentar.

ich habe mir nochmal gedacht und Das Code nochmal  überprüfen.

Du hast hier ein Service dekorieren und das ist schön aber das ist nicht die Lösung.

Shopware_Controllers_Frontend_AjaxSearch::indexAction::Line 57

hier es benuztet shopware_search.store_front_criteria_factory(service)::createAjaxSearchCriteria funktion => getSearchCriteria=> …  am ende $handler->handleRequest

hier das Code ruaft CoreCriteriaRequestHandler::handleRequest  an dann line 120 rauft addSorting funktion an

wie du siehst hier das Code rauft SearchRankingSorting Class dierkt an (line: 304) und nicht call die Service.

also ich glaube deine Lösung ist:

1- ein neue Sorting Class erstellen SearchBundle/Sorting/NewSearchRankingSorting.php mit die gleich Code in SearchRankingSorting und nicht anderen den Name in getName funktion lassen ihn als search_ranking, nur anderen der Classname.

2- ein neue Sortinghandeler erstellen SearchBundleDBAL\SortingHandler\NewSearchRankingSortingHandler wie SearchRankingSortingHandler anderen das Code zu pass deine NewSearchRankingSorting.

3- in generateSorting anderen das Code wie du mochtest.

4- regierstern deine Handler mit ‘Shopware_SearchBundleDBAL_Collect_Sorting_Handlers’ subcricbeevent.

5- subcribe ‘Shopware_SearchBundle_Create_Ajax_Search_Criteria’ event line 177 get $criteria arg.

6- get Sorting bei getSortings() funktion überprüfen ob search_ranking key existiert.

7- ob ja rauft dieses Code an

             $criteria->addSorting(
                    new NewSearchRankingSorting(SortingInterface::SORT_DESC)
                );

das Code werde search_ranking  key überschreiben

ich glaube das ist alle probier und gib mir beseid ob funktionert.

VG

Ahmad.

Hallo Ahamd,

danke für deine Beschreibung. Ich werde es bei Gelegenheit ausprobieren. Der andere Weg funktioniert im Moment. Dein Weg ist aber sicher optimaler.
Wie du es beschreibst sollte es aber funktionieren.