Anzeige:
Ergebnis 1 bis 7 von 7

Thema: MySQL FULLTEXT MATCH AGAINST Suche

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.04.2005
    Beiträge
    12

    MySQL FULLTEXT MATCH AGAINST Suche

    Hallo zusammen,

    ich muss anhand mehrerer Suchwörter Datensätze aus einer Tabelle suchen.
    Auf LIKE muss und möchte ich aus funktionellen Gründen verzichten.

    Mein Problem ist, dass ich nach einem Wortfetzen suche, diesen MATCH allerdings nicht findet. In manchen fällen funktioniert alles super aber eben nicht immer und ich kann mir nicht erklären warum!

    Hier ein Beispiel:
    Das Datenbankfeld matchtext hat den Inhalt: "Kartoffelpüree ist 10 besser für die Haut als Kalk"

    Ich habe folgende Suchen ausprobiert, komme aber nicht zu einem Ergebnis.
    SELECT * FROM `artikel` WHERE MATCH( matchtest ) AGAINST ('*ree*');
    SELECT * FROM `artikel` WHERE MATCH( matchtest ) AGAINST ('*ree*' IN BOOLEAN MODE);
    SELECT * FROM `artikel` WHERE MATCH( matchtest ) AGAINST ('*ree*' WITH QUERY EXPANSION);

    Hat jemand eine Idee was ich falsch mache?

    In meiner my.cnf habe ich folgende Einträge hinzugefügt:
    ft_stopword_file=""
    ft_min_word_len=1

    Einen REPAIR TABLE habe ich auch schon durchgeführt.


    Danke schonmal!

    Jake

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Welcher Datenbank Type MyIsam oder InnoDB?
    Ohne Tabellen Struktur Info kann man keine Analyse machen
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.04.2005
    Beiträge
    12
    Hallo undefined,

    danke für deine Reaktion :-)

    Tabellentyp ist: MyISAM

    Hier meine Beispieltabelle als SQL:
    Code:
    CREATE TABLE `artikel` (
      `artikelid` bigint(20) NOT NULL AUTO_INCREMENT,
      `matchtest` varchar(1000) NOT NULL,
      PRIMARY KEY (`artikelid`),
      FULLTEXT KEY `matchtest` (`matchtest`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Artikel' AUTO_INCREMENT=1000001 ;
    
    INSERT INTO `artikel` VALUES (1000000, 'Kartoffelpüree ist 10 besser für die Haut als Kalk');

    Danke schonmal für die Bemühungen!

    Jake

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Also was mir zuerst ins Auge sticht ist deine Größenangabe von varchar() bitte Lese die MySQL Dokumentation zu Datentypen.
    Stelle dir die Frage:
    Warum heißt es FULLTEXT und warum nehme ich Type VARCHAR ?

    Code:
    CREATE TABLE `artikel` (
      `artikelid` bigint(20) AUTO_INCREMENT  NOT NULL PRIMARY KEY,
      `content` TEXT,
      FULLTEXT KEY (`content`)
    ) ENGINE=MyISAM;
    
    SELECT * FROM `artikel` WHERE MATCH (`content`) AGAINST ( 'suchanfrage' );
    Anmerkungen:
    Alle Parameter der MATCH Funktion müssen Spalten der selben Tabelle sein - Die Teil desselben Volltext-Indexes ist.
    Das Argument für AGAINST muss eine Konstante Zeichenkette sein!
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.04.2005
    Beiträge
    12
    Die VARCHAR-Spalte war vorher kein FULLTEXT, deswegen war es noch der alte Typ. Diesen habe ich nun in TEXT umgewandelt, danke.

    Hat aber leider nichts geholfen.
    Code:
    SELECT * FROM `artikel` WHERE MATCH( `matchtest` ) AGAINST ('*ree*' IN BOOLEAN MODE);
    Mit deiner Tabelle habe ich es auch getestet, aber war klar, da diese jetzt ja den gleichen Aufbau haben.


    Irgendwie habe ich das Gefühl, dass FULLTEXT den Index nicht richtig aufbaut. Im Produktivsystem sind in dieser Tabelle über 600k Datensätze und die Suche mit MATCH funktioniert soweit ganz gut, bis auf das manche Datensätze nicht gefunden werden. Deswegen habe ich die Testtabelle mit nur einem Datensatz erstellt um zu testen ob das gleiche passiert und es passiert das gleiche.
    Ich habe nun auch ausgeschlossen, dass es kein Problem mit Umlauten gibt. (Tabelle und Spalte als UTF8, Umlaute entfernt).

    Hier die aktuelle Tabelle:
    Code:
    DROP TABLE IF EXISTS `artikel`;
    CREATE TABLE `artikel` (
      `artikelid` bigint(20) NOT NULL AUTO_INCREMENT,
      `matchtest` text NOT NULL,
      PRIMARY KEY (`artikelid`),
      FULLTEXT KEY `matchtest` (`matchtest`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 PACK_KEYS=0 COMMENT='Artikel' AUTO_INCREMENT=1000001 ;
    
    INSERT INTO `artikel` VALUES (1000000, 'Kartoffelpree ist 10 besser für die Haut als Kalke');

    Ciao Jake

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.04.2005
    Beiträge
    12
    Hi,

    hat noch jemand eine Idee zu diesem Problem? Würde mich sehr freuen! :-)

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.10.2014
    Beiträge
    1
    Hi, I need to find records from a table using multiple search words. On LIKE must and I want to. refrain from functional reasons My problem is that I search for a word fragments, these MATCH but can not find. In some cases everything works great but not always and I can not explain why! Here is an example: The database field has match text content: "mashed potatoes is 10 better for the skin than lime" subsequent searches tried I have, but I'm not . a result SELECT * FROM `artikel` WHERE MATCH (match test) AGAINST ('* ree *');
    We provide guarantee to pass 117-202 practice test questions latest resource MICROSOFT We offer up-to-dated University of Alabama We provide updated Princeton Universitypaced test engine to help you pass University of Hawaii

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •