Wie Schlagwortsuche in Datenbank umsetzen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Wie Schlagwortsuche in Datenbank umsetzen?

    Ich habe in einer MariaDB-Datenbank meine Kundendateien. Es gibt eine Tabelle mit den reinen Kundendaten und eine mit den einzelnen Aufträge. Ich würde nun gerne die Möglichkeit einer Schlagwortsuche haben, um zu sehen, in welchem Auftrag ich das ein oder andere bereits so ausgeführt habe. Dazu muss ich natürlich schon beim Anlegen/Ausführen der Bestellung bestimmte Schlagworte erfassen.

    Meine Frage dazu ist nun: organisiere ich das in meiner Datenbank so, dass ich einfach in der Datenbank-Tabelle "Bestellungen" ein zusätzliches Textfeld vorhalte, in dem ich die von mir vergebenen Schlagwörter eingebe und beispielsweise mit einem Komma trenne? Suchen würde ich dann mit "SELECT * FROM Aufträge WHERE Aufträge.Schlagwörter LIKE '%VORKASSE%'"?

    Oder gibt es eine bessere Möglichkeit, das in der Datenbank zu organisieren?
    Hallo,
    ich weiß nicht, wie "open minded" und erfahren du bist, aber ich würde mir überlegen, ob nicht eine eigene "Suchmaschine" besser für so etwas wäre. Es gibt mit Apache Solr eine Such-Lösung, die verdammt schnell große Datenmengen durchsuchen kann. Mit Solr Net gibt es einen Client, über den man mit einer .NET-Anwendung Anfragen an den Solr schicken und verarbeiten kann.
    Wir haben bei uns in der Firma eine Solr-Instanz laufen, die alle Produkte indiziert hat. Unsere Bearbeiter müssen dann nicht genau die Produktbeschreibung kennen, sondern können dann u.a. auch nach einer Grafikkarte mit technischen Merkmalen suchen (z.B. "RTX 8 GB RAM") und bekommen dann alle passenden Produkte aus der Datenbank aufgelistet.

    VB_Noob schrieb:

    in dem ich die von mir vergebenen Schlagwörter eingebe und beispielsweise mit einem Komma trenne


    Dein Vorgehen würde bedeuten, dass du in jede Bestellung deine Schlagwörter eingeben musst.
    Bestellungen ohne Schlagwort werden dann nirgends gefunden.
    Da würde ich lieber eine Spalte Zahlungsart einbauen, wo du einen Verweis auf einen Eintrag in der Tabelle Zahlungsart einträgst.

    Schlagwörter müssen eingepflegt werden.
    Wenn das nicht automatisiert werden kann, kannst du sie auch weglassen, weil manuell funktioniert das nicht zuverlässig.
    Und wenn es automatisiert werden kann, lässt sich das wahrscheinlich auf wenige Properties festlegen, die du in einer gesonderten Tabelle speicherst worauf du in Spalten oder in einer Zwischentabelle verweisen kannst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Da es sich um eine Vielzahl von Schlagwörtern handelt, die sich nicht automatisieren lassen, müssen diese leider im Laufe der Auftragsbearbeitung immer mal wieder manuell eingetragen werden. Es sind dabei viele unterschiedliche Schlagworte, die sich nicht nicht vorher in einer eigenen Tabelle festlegen lassen.

    Mir geht es dabei um die optimale Gestaltung der Datenbank und der Abfrage.
    Ich würde Schlagworte in einer eigenen Tabelle verwalten.
    Und bei der Eingabe neuer Schlagworte per Intellisense eine Liste ähnlicher Schlagworte zur Auswahl anbieten.
    Sonst tätich haufenweise Schlagwort-Dubletten befürchten, mit immer minimal unterschiedlicher Schreibweise.

    Allerdings das Problem "ähnlicher" (Schlag-)Worte ist ein sehr anspruchsvolles.
    Wort-Ähnlichkeit muss definiert sein, und das bekannteste Verfahren - Levensthein - macht diesen Job hundsmiserabel.