# Konzeptsuche Full Text Search



## Thallius (20. Mrz 2020)

Hallo

ich stehe vor folegendem Problem und habe noch keinen so richtig guten Ansatz. Vielleicht hat ja einer von euch sowas schon einmal gemacht oder hat eine gute Idee:

Ich habe eine Datenbank Tabelle die im Prinzip ein Informations-Blatt zu einem Produkt ist. Dieses Blatt hat ca 20 Sektionen mit jeweils wieder ca 10 Untersektionen mit jeweils wieder 5-10 Untersektionen.

Nehmen wir mal als fiktives Beispiel einen Computer

1) Mainboard 
    1.1) CPU
         1.1.1) Intel Pentium P1
         1.1.2) 8MB first level cache
         1.1.3) 64MB second level cache
         1.1.4) Speed 4GHz 
    1.2) Connectors
         1.2.1) USB 3.0
         1.2.2) SATA v1.0
   1.3) GFX
        1.3.1) Invidia 380
        1.3.2) RAM 8MB
        1.3.3) Speed 4GHz
2) GFX Card
    2.1) CPU
      2.1.1) AMD xx54
      2.1.2) 16MB first level cache
      2.1.3) 256MB second level cache 
      2.1.4) Speed 6Ghz
      2.1.5) RAM 4MB

Ich soll nun eine App schreiben, welche in diesem Dokument nach Antworten zu Fragen oder Keywords sucht. Also z.B.

Jemand stellt die Frage "Which speed has the computer". In dem Fall würde ich dann 3 Ergebnisse bekommen. Da nichts genauer spezifiziert ist hätten diese wohl auch die gleiche Gewichtung. 
Stelle ich die Frage "How big is the Cache of the CPU" sollte ich  2 Antworten bekommen. Nämlich die des Mainboards und die der Grafikkarte, wobei aber die Gewichtung des Mainboards doppelt so hoch ist wie die der Grafikkarte, da hier zwei Keywords zutreffen.

Wie würdet Ihr dieses Problem angehen. Nutzen muss ich mySQL 5.x. Also mit rank() ist nicht. 
Da die Datenmenge relativ überschaubar ist (So ca 1MB pro Dokument) könnte man auch das ganze Dokument ersstmal in einen String laden und darin suchen. 
Ich weiß im Moment nicht so recht wie ich das am besten anpacken soll.

Über einen Ansatz würde ich mich freuen

Claus


----------



## mrBrown (20. Mrz 2020)

Wie sieht denn die Struktur aus, das ist doch sicherlich nicht einfach nur eine Tabelle mit einer Spalte?


----------



## Thallius (20. Mrz 2020)

Nein es sind genau genommen ist es viel komplizierter aufgebaut als man zunächst denkt. Aber das soll hier ja nicht das thema sein. Nimm einfach mal den einfachsten Fall. Ich habe 1 Spalte Question und 1 Spalte Answer in der Datenbank. Davon habe ich X für einen Computer.


----------



## mrBrown (20. Mrz 2020)

Question und Answer würde ich oben als „Which speed has the computer“ und 4GHz/4GHz/6GHz sehen - da fehlt aber dann noch irgendwie das ganze Dokument auf dem Gesucht wird.

Und für die Suche ist die Struktur relevant, davon hängt ab wie und was man überhaupt suchen kann. Jeder einzelne „Ast“ inklusive Elter muss ja irgendwie verfügbar sein.


Ein möglicher Ansatz könnte sein, den Baum in eine Art flache Tabelle zu überführen:


```
„Mainboard CPU Intel Pentium P1“, 1,1,1
„Mainboard CPU 8Mb...“, 1,1,2
„GFX Card CPU AMD xx54“, 2,1,1
„GFX Card CPU  16MB first level cache“, 2,1,
```
Dann nach Anzahl der Übereinstimmungen zwischen dem String und dem Such-String sortieren.


----------



## Thallius (20. Mrz 2020)

So in etwa habe ich mir das auch gedacht. Dann müßte ich "nur" zählen wie viele Worte der Frage in der Antwort vorkommen und hätte eine Gewichtung


----------

