Ankündigung

Einklappen
Keine Ankündigung bisher.

Suchlogik Datenbank PHP

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Suchlogik Datenbank PHP

    Hallo,

    ich habe folgende Datenbank:

    ID - Titel - Kurzbeschreibung - Komplettbeschreibung

    Über ein einziges Suchfeld wird eine Abfrage ausgeführt, die dann Ergebnisse anzeigt, wobei diese sortiert sein sollen:

    1) Suchwort ist im Titel
    2) Suchwort ist in Kurzbeschreibung
    3) Suchwort ist in Komplettbeschreibung

    Soweit habe ich das mit 3 Select-Befehlen und 2x Union umgesetzt.

    Nun kommt hinzu, dass ein Objekt, das in seiner Komplettbeschreibung 3x den Suchbegriff enthält, höher geranked wird als ein solches, das ihn nur 1x enthält.
    (Cool wäre auch, wenn 1x Kurzbeschreibung + 1x Komplettbeschreibung über 1x Kurzbeschreibung steht. DAs ist momentan nicht der Falll aufgrund der "Select-Befehl-Reihenfolge"

    Hat jemand Ideen/Anregungen zur Umsetzung?

    Danke!

  • #2
    Moin,

    da es um eine Volltextsuche geht würde ich zuerst eine entsprechende Suchengine empfehlen -> Lucene + Solr oder elasticsearch.
    Falls du auf deinem Server nichts installieren kannst wäre auch z.B. die Lucene-Implementierung aus dem Zend Framework möglich, bin mir aber gerade nicht sicher ob die das mit dem zählen hinbekommt.

    Welche DBMS nutzt du aktuell, MySQL?
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Zitat von cr4w Beitrag anzeigen

      Nun kommt hinzu, dass ein Objekt, das in seiner Komplettbeschreibung 3x den Suchbegriff enthält, höher geranked wird als ein solches, das ihn nur 1x enthält.
      (Cool wäre auch, wenn 1x Kurzbeschreibung + 1x Komplettbeschreibung über 1x Kurzbeschreibung steht. DAs ist momentan nicht der Falll aufgrund der "Select-Befehl-Reihenfolge"

      Hat jemand Ideen/Anregungen zur Umsetzung?

      Danke!
      sollte sich mit ts_rank() alles machen lassen. https://www.postgresql.org/docs/9.6/...extsearch.html . Falls Du PostgreSQL hast.

      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Hallo,

        ja, entweder Elasticsearch, der das bereits schon effizient macht, oder erstmal lokal herholen, was den Suchbegriff enthält. Wie hoch das Vorkommen des jeweiligen Suchbegriffs ist, findest Du dann mit PHP heraus. Das müsste so viel schneller gehen, als die Datenbank ständig über die gleichen Daten rödeln zu lassen. Das ist soviel ich weiß der Bottleneck bei relationalen Datenbanken. Volltextsuche a la
        Code:
        WHERE spalte LIKE '%suchtext%'
        ist eh immer heikel. Das dann auch noch über mehrere Spalten, naja, viel Spaß beim Warten...


        MFG

        derwunner

        Kommentar


        • #5
          Zitat von derwunner Beitrag anzeigen
          Volltextsuche a la
          Code:
          WHERE spalte LIKE '%suchtext%'
          ist eh immer heikel. Das dann auch noch über mehrere Spalten, naja, viel Spaß beim Warten...


          MFG

          derwunner
          Das ist auch keine Volltextsuche, das ist gewurschtel für Anfänger.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Zitat von cr4w Beitrag anzeigen
            Soweit habe ich das mit 3 Select-Befehlen und 2x Union umgesetzt.

            Nun kommt hinzu, dass ein Objekt, ..
            Wenn Du bereits mit Union arbeitest und ein Änderung / Erweiterung der Infrastruktor aussichtslos ist, kannst Du jedenfalls den Select im Union die "Quelle" der Info mitgeben.
            Also in jedem der 3 Statements eine weitere Spalte eintragen, die eine Konstante liefert, um die Quelle wiedererkennen zu können:
            Select "Titel" as Quelle ...
            union
            Select "Beschreibung" ...
            union
            Select "Volltext" ...
            Dann ist noch nichts gezählt, aber vielleicht geht da noch mehr.

            Allerdings:

            Wenn möglich würde ich allerdings für solche Zwecke nach besseren Lösungen suchen, wie es akretschmer vorschlägt bspw.

            Kommentar

            Lädt...
            X