# SearchBundle - Sortierung Suche

**URL:** <https://forum.shopware.com/t/searchbundle-sortierung-suche/42526>\
**Category:** Programmierung\
**Created:** [3. Januar 2017 um 12:12 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526 "2017-01-03T12:12:19Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [3. Januar 2017 um 12:12 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526/1 "2017-01-03T12:12:19Z")

</div>

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.

&nbsp;

Wo ist mein Denkfehler?  
[shopware/AjaxSearch.php at 5.2 · shopware/shopware · GitHub](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Controllers/Frontend/AjaxSearch.php#L59)

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?

&nbsp;

Gruß  
Ottscho

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [4. Januar 2017 um 12:26 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526/2 "2017-01-04T12:26:06Z")

</div>

Hallo,

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

VG

Ahmad

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [4. Januar 2017 um 13:43 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526/3 "2017-01-04T13:43:51Z")

</div>

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);

```

&nbsp;

Problem ist die Sortierung über die ID.

> <https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundleDBAL/SortingHandler/SearchRankingSortingHandler.php#L63>

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

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

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [7. Januar 2017 um 21:03 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526/4 "2017-01-07T21:03:33Z")

</div>

Hallo,

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

VG

Ahmad.

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [7. Januar 2017 um 22:34 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526/5 "2017-01-07T22:34:55Z")

</div>

Also&nbsp;@ottscho‍,

vergess&nbsp;letzten Kommentar.

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

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

Shopware\_Controllers\_Frontend\_AjaxSearch::indexAction::[Line 57](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Controllers/Frontend/AjaxSearch.php#L57)

hier es benuztet&nbsp;shopware\_search.store\_front\_criteria\_factory(service)::[createAjaxSearchCriteria funktion](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/StoreFrontCriteriaFactory.php#L151)&nbsp;=\>&nbsp;[getSearchCriteria](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/StoreFrontCriteriaFactory.php#L248)=\> … &nbsp;am ende&nbsp;[$handler-\>handleRequest](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/StoreFrontCriteriaFactory.php#L275)

hier das Code ruaft&nbsp;[CoreCriteriaRequestHandler::handleRequest](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/CriteriaRequestHandler/CoreCriteriaRequestHandler.php#L104)&nbsp; an dann line 120 rauft&nbsp;[addSorting funktion](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/CriteriaRequestHandler/CoreCriteriaRequestHandler.php#L266) an

wie du siehst hier das Code rauft&nbsp;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&nbsp;[SearchRankingSorting](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/Sorting/SearchRankingSorting.php)&nbsp;und nicht anderen den Name in getName funktion lassen ihn als&nbsp;search\_ranking, nur anderen der Classname.

2- ein neue Sortinghandeler erstellen&nbsp;SearchBundleDBAL\SortingHandler\NewSearchRankingSortingHandler wie&nbsp;[SearchRankingSortingHandler](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundleDBAL/SortingHandler/SearchRankingSortingHandler.php)&nbsp;anderen das Code zu pass deine NewSearchRankingSorting.

3- in&nbsp;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](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/StoreFrontCriteriaFactory.php#L177)&nbsp;get $criteria arg.

6- get Sorting bei&nbsp;[getSortings() funktion](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Bundle/SearchBundle/Criteria.php#L284)&nbsp;überprüfen ob&nbsp;search\_ranking key existiert.

7- ob ja rauft dieses Code an

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

```

das Code werde search\_ranking &nbsp;key überschreiben

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

VG

Ahmad.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [11. Januar 2017 um 09:06 UTC](https://forum.shopware.com/t/searchbundle-sortierung-suche/42526/6 "2017-01-11T09:06:19Z")

</div>

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.
