MySQL Volltextsuche mit Wortgrenzen

8

Ich habe einige Artikel gelesen und Probleme , konnten jedoch keine befriedigende Lösung finden. Ich möchte verwandte Datensätze aus der Datenbank auswählen, wenn ein Benutzer ein Formular ausfüllt. Auf dieselbe Weise funktioniert die Funktionalität auf dieser Site, wenn Sie eine Frage stellen.

Betrachten Sie eine Datenbanktabelle mit den folgenden drei Datensätzen in der Spalte subject

%Vor%

Ich starte meine Suchanfrage mit dem Wort zoek , damit ich die relevantesten Ergebnisse aus der Datenbank nach dem Begriff zoek abfragen kann. Ich habe die folgende Frage gestellt:

%Vor%

Wenn ich diese Abfrage ausführen würde, hätte ich erwartet, dass alle Datensätze angezeigt werden und (wahrscheinlich weiß ich nicht, wie die Spezifität in MySQL funktioniert) ID 3, die oben angezeigt wird (weil genaues Wort übereinstimmt).

Stattdessen waren die Ergebnisse der Abfrage nur Zeile 2 und 3 mit genau der gleichen Punktzahl (0.031008131802082062).

Was muss ich in meiner Abfrage ändern, um den passenden Datensätzen zu entsprechen? Bedenken Sie auch, dass Benutzer Schlüsselwörter oder Sätze eingeben können.

    
Maurice 15.01.2016, 11:27
quelle

5 Antworten

0

Es gibt eine Lösung für Ihren Fall:

%Vor%

Erwartetes Ergebnis:

%Vor%     
Cédric Miachon 02.02.2016, 10:05
quelle
2

Die MySQL-Volltextsuche unterstützt keine Suffixe.

Um die erste Zeile zu erhalten, müssten Sie eine Übereinstimmung mit '* zoek *' machen, was momentan nicht erlaubt ist.

Die Alternative ist die Verwendung von

%Vor%     
R.Costa 26.01.2016 15:40
quelle
1

Wie von anderen empfohlen, unterstützen die FULLTEXT -Indizes von MySQL keine führenden Platzhalter und können daher bei der Suche nach Suffixen nicht helfen.

Allerdings könnte der neue ngram-Volltext-Parser hilfreich sein :

  

Der integrierte MySQL-Volltext-Parser verwendet den Leerraum zwischen Wörtern als Trennzeichen, um zu bestimmen, wo Wörter beginnen und enden. Dies ist eine Einschränkung bei der Arbeit mit ideografischen Sprachen, die keine Worttrennzeichen verwenden. Um diese Einschränkung zu umgehen, bietet MySQL einen ngram-Volltext-Parser (...).

     

Ein ngram ist eine zusammenhängende Folge von n Zeichen aus einer gegebenen Textfolge. Der Ngram-Parser zerlegt eine Textsequenz in eine zusammenhängende Folge von n Zeichen.

Da ich diese Funktion noch nie benutzt habe, kann ich zu diesem Thema nicht weiterhelfen. Beachten Sie jedoch:

  

Da ein Ngram FULLTEXT Index nur Ngramme enthält und keine Informationen über den Anfang von Begriffen enthält, können Platzhaltersuchen unerwartete Ergebnisse liefern.

    
RandomSeed 28.01.2016 12:13
quelle
1

Versuchen Sie diese Abfragen für verschiedene Ergebnisse:

  1. Wählen Sie alle Betreffzeilen aus, die mit dem Buchstaben "z" beginnen:
    SELECT ID, Subject FROM table_name WHERE Subject LIKE 'z%';

  2. Wählen Sie alle Betreffenden aus, die mit dem Buchstaben "z" enden:
    SELECT ID, Subject FROM table_name WHERE Subject LIKE '%z';

  3. Wählen Sie alle Themen aus, die das Muster "zoek" enthalten:
    SELECT ID, Subject FROM table_name WHERE Subject LIKE '%zoek%';

Mary Grace Bautista 27.01.2016 02:47
quelle
0

Entschuldigung ...

Die Mitte des Wortes (doorzoekbaar) ist, nach Definition von% FULLTEXT von MySQL, nicht etwas, das gefunden wird. FULLTEXT hat kein Konzept von "zusammengesetzten Substantiven", also wird es nicht versuchen, das Wort auseinander zu nehmen.

Die Definition eines "Wortes" in FULLTEXT gibt "Strich" und "Raum" die gleiche Bedeutung - nämlich eine Wortgrenze. Also, zoek de... und zoek-... werden gleich gewichtet.

Sieh dir Solr, Lucene und andere "Fulltext-Lösungen" von Drittanbietern an. Sie können (oder können nicht) liefern, was Sie wollen.

zoek* und +zoek* , wenn mit IN BOOLEAN MODE ausgeführt, wird zoekbaar finden.

    
Rick James 26.01.2016 19:52
quelle

Tags und Links