You are not logged in.

  • Login

1

Thursday, September 6th 2007, 4:25pm

SQL Suche

Hi!

Ich habe vor demnächst eine Suchfunktion zu bauen. Daher wollte ich vorher mal den theoretischen Ansatz klären.
Bei Google habe ich ein bisschen was gefunden, was allerdings bei ersten Versuchen nicht wirklich geklappt hat... :P

Ich möchte in diversen Spalten suchen und am besten auch die Möglichkeit bieten nach allen oder mindestens einem Ausdruck der Eingabe zu suchen.

Gruß,
Max123

2

Thursday, September 6th 2007, 4:43pm

Eine Volltextsuche mit MySQL machst du mit einem FULLTEXT-Index und dem Ausdruck MATCH spalte AGAINST suchausdruck

http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html

Quoted

MySQL unterstützt die Volltextindizierung und -suche. Ein Volltextindex ist in MySQL ein Index des Typs FULLTEXT. FULLTEXT-Indizes können nur bei MyISAM-Tabellen eingesetzt werden. Sie lassen sich für CHAR-, VARCHAR- und TEXT-Spalten mit CREATE TABLE erstellen oder mit ALTER TABLE oder CREATE INDEX im Nachhinein hinzufügen. Bei größeren Datenmengen erfolgt das Laden Ihrer Daten in eine Tabelle ohne FULLTEXT-Index und das nachfolgende Erstellen des Indexes wesentlich schneller als das Einladen in eine Tabelle mit vorhandenem FULLTEXT-Index.
Die Volltextsuche funktioniert (je nach Datenbankkonfiguration) nur mit Wörtern mit mehr als 3 Zeichen. Wenn du etwas kleineres brauchst, reicht auch ein normaler Index für einen schnellen Zugriff.

3

Wednesday, September 19th 2007, 5:54pm

Muss ich bei dieser Suchsyntax für jede Kombination aus durchsuchten Spalten einen eigenen FULLTEXT-Index anlegen?

4

Wednesday, September 19th 2007, 7:05pm

Ja, ich glaub schon... ich glaub intern hat der Index auch einen eigenen Namen. Behandle ihn also wie eine Spalte.

5

Wednesday, September 19th 2007, 7:15pm

Ich muss schon die einzelnen Spalten beim Suchen ansprechen, ob das auch über die Idizes gehts, weiss ich nicht.

Das ist natürlich in so fern problematisch, da man natürlich auch die Spalten mit viel Inhalt ansprechen will.
Und wenn ich nun jede Spalte in drei verschiedenen Indizes speichern muss, dann brauche ich fast den vierfachen Speicher. Das ist natürlich nicht akzeptabel.

Naja, dann muss ich wohl für die Suchfelder nur speielle Kombinationen zulassen, die ich dann vorgeben muss.

6

Wednesday, September 19th 2007, 10:28pm

Naja, der Vorteil am Volltextindex ist, dass der Rot-Schwarz-Baum schon von MySQL verwaltet wird und nicht erst bei der Anfrage generiert wird.
Speicherplatz oder Performance - das alte Problem *g*


Also wenn du nur auf den dreifachen Speicherplart kommen willst, machst du für jede Spalte einen Volltextindex und einen weiteren für alle Spalten zusammen *g*

7

Thursday, September 20th 2007, 12:07am

Naja, ich habe jetzt inhaltsähnliche Spalten in einem Index zusammengefasst, sodass man verschiedene Suchanfragen auf vordefinierten Spalten machen kann. Das sollte erstmal reichen.
Nun habe ich noch das Problem, dass Suchwörter mindestens 4 Zeichen haben müssen, was bei mir allerdings nicht immer der Fall ist. Aber wie man das ändern kann, weiss ich gar nicht. Dabei würden mir drei Stellen schon genügen.

8

Thursday, September 20th 2007, 11:04am

Bist du root? Dann hast du eine Chance...
da gibts einen wert in der my.cnf und danach muss man mit OPTIMIZE TABLE ausführen um den baum neu aufbauen lassen.

Apache

1
2
3
[mysqld]
# Optimize Search Requests
ft_min_word_len=3

9

Thursday, September 20th 2007, 1:09pm

Leider nicht Root, das kann ich mir atm nicht leisten... :P

10

Thursday, September 20th 2007, 3:21pm

Ich weiß auch nicht, obs da irgendwelche Tricks gibt... Suchquery auffüllen mit Leerzeichen oder sowas lustiges.
Aber davon ist mir nichts bekannt...

11

Friday, September 21st 2007, 12:24am

Leerteichen interpretiert der ja als Worttrennungen. Daher nützt das nichts...

Similar threads

Social bookmarks