Admin Such-Optimierung / default-search-configuration.js

Hallo,

wir haben ca. 400.000 Bestellungen in der order Tabelle. Die Suche im Admin erfolgt meist nach Bestellnummer, dauert aber meist über 1 Minute, weil im Hintergrund alle möglichen Felder mit durchsucht werden (Kunden-Adresse, Tracking-IDs etc.)
Kann ich, um die Suche nach Bestellungen zu beschleunigen, die durchsuchten Felder reduzieren?
Ich sehe hier eine Query-Konfiguration:

vendor/shopware/administration/Resources/app/administration/src/module/sw-order/default-search-configuration.js

Kann ich diese default-search-configuration.js per eigenem Plugin überschreiben, oder sonstwie diese Konfiguration ändern, ohne die Originaldatei zu verändern?

*Edit: die .js Datei definiert wohl eher die Felder die am rechten Rand durch den Benutzer gefiltert werden können. Was ich meine ist wie man die Suche nach Text aus dem oberen Suchfeld optimieren kann.

Da würde ich mal im Slack Channel von Shopware fragen.

Mein Ansatz wäre:
EntitySearchedEvent subscriben und den query auf die nötigen Felder beschränken. Der Query selbst hat aber keinen Titel gesetzt. Es ist nur die Entity bekannt und dass der Query bei mir aktuell 69 Felder hat.

Danke, der Ansatz funktioniert schon mal!

  • Im Subscriber auf den Entity-Namen „order“ einschränken
  • dann die Filter der $event->getCriteria()->getQueries() prüfen
  • aussortieren was ich nicht brauche

Muss einem nur klar sein dass man damit nicht nur die API ändert: /api/search/order
sondern auch im Frontend auf solchen URLs eingreift:

  • /checkout/order
  • /checkout/finish

… was hier nicht gewünscht ist. Daher suche ich noch einen Weg um das auf /admin einzuschränken.

@ansgar If the translation is correct on what you want to do: Add order entity extension fields to the order overview search;

We solved the problem like this:

// <plugin>/src/Resources/app/administration/src/overrides/module/sw-order/index.js
import { searchRankingPoint } from 'src/app/service/search-ranking.service';

const { Module } = Shopware;

const module = Module.getModuleByEntityName('order');

if (module?.manifest?.defaultSearchConfiguration) {
  module.manifest.defaultSearchConfiguration = {
    ...module.manifest.defaultSearchConfiguration,
    extensions: {
      // In case some other plugin has already done this trick; we do not want to remove theirs.
      ...(module.manifest.defaultSearchConfiguration.extensions ?? {}),
      // Add our extension fields to the omnisearch
      someExtension: {
        someProperty: {
          _searchable: true,
          _score: searchRankingPoint.HIGH_SEARCH_RANKING,
        },
      }
    },
  };
}

This then of course needs to be imported by the plugin main.js.

EDIT: No you want to remove things…
And so to remove things… you can just remove them from the found module.manifest.defaultSearchConfiguration

1 „Gefällt mir“

Thanks for the hint, Aubrey.

Goal is to speed up the slow search in the admin area. Especially if you search for a specific order when the search phrase is an order number. This is a very common use case, so the potential for an enhancement is great.

I just found that v6.5 will index the order.product_number column, so this is probably the best solution: Shopware Issuetracker