Martin87: Frage zur Volltextsuche in MySql

Hi Leute,

folgendes:

Ich benutze eine Volltextsuche in MySql und zwar im BOOLEAN MODE, wie folgt:

$search = 'MATCH (U.vorname, U.nachname) AGAINST (''.mysql_real_escape_string($_GET['name']).'' IN BOOLEAN MODE)';

jetzt habe ich gelesen, dass die suche schneller geht wenn ich über die beiden spalten vorname und nachname einen FULLTEXT lege. Habe ich auch gemacht - dieser FULLTEXT in der Datenbank beinhaltet die beiden Felder vorname und nachname und trägt den namen "suche".

Kann ich den sql-code nun so lassen, oder muss das ganze dann so heißen:

$search = 'MATCH (U.suche) AGAINST (''.mysql_real_escape_string($_GET['name']).'' IN BOOLEAN MODE)';

Es kommt so immer zu fehlern.

Wird automatisch erkannt, dass auf den feldern ein FULLTEXT sitzt oder was mache ich falsch?

--
lg martin
  1. Hi,

    $search = 'MATCH (U.vorname, U.nachname) AGAINST (''.mysql_real_escape_string($_GET['name']).'' IN BOOLEAN MODE)';

    jetzt habe ich gelesen, dass die suche schneller geht wenn ich über die beiden spalten vorname und nachname einen FULLTEXT lege. Habe ich auch gemacht - dieser FULLTEXT in der Datenbank beinhaltet die beiden Felder vorname und nachname und trägt den namen "suche".

    Ohne fulltext-index gehts ja net per match against, oder täusch ich mich *g*

    Kann ich den sql-code nun so lassen, oder muss das ganze dann so heißen:

    $search = 'MATCH (U.suche) AGAINST (''.mysql_real_escape_string($_GET['name']).'' IN BOOLEAN MODE)';

    Es kommt so immer zu fehlern.

    Der Name ist irrelevant. Wichtig ist, daß du genau die Spalten angibst, über die du auch den Index gelegt hast. Wolltest du in einzelnen Spalten suchen, so müsstest über jede Splate einen eigenen Index legen.

    Es sollte etwa so heißen:
    $search="SELECT irgendwas FROM meinertabelle WHERE MATCH(vorname,nachname) AGAINST ('wort1 wort2... ' IN BOOLEAN MODE)"

    Wird automatisch erkannt, dass auf den feldern ein FULLTEXT sitzt oder was mache ich falsch?

    »»

    Spalten angeben, über die der Index liegt. Per match against kann man meines Wissens nur fulltext-indices ansprechen, aber ev täusch ich mich.

    schöne Grüße

    1. Hi,

      der BOOLEAN MODE benötigt nicht zwangsläufig fulltext-indices, aber egal.

      Also fahre ich richtig wenn ich schreibe:

      $search = 'MATCH (U.vorname, U.nachname) AGAINST (''.mysql_real_escape_string($_GET['name']).'' IN BOOLEAN MODE)';

      und zuvor EINEN fulltext-index mit den beiden spalten vorname und name angelegt habe?

      --
      lg martin