2010-12-10 7 views
5

Ich versuche, eine Volltextsuche mit mysql, um eine Zeichenfolge zu finden. Das Problem ist, dass es an erster Stelle seltsame Ergebnisse liefert.MySQL Match Volltext

Zum Beispiel: 'Passat 2.0 tdi' die Zeichenfolge:

  AND MATCH (
      records_veiculos.titulo, records_veiculos.descricao 
      ) 
      AGAINST (
      'passat 2.0 tdi' WITH QUERY EXPANSION 
      ) 

dies als erstes Ergebnis zurückkehrt (die anderen sind in Ordnung):

Volkswagen Passat Variant 1.9 TDI- ANO 2003 

wich ist falsch, da nicht da ist "2.0" in diesem Beispiel.

Was könnte es sein?

bearbeiten: Auch, da dies wahrscheinlich eine große Datenbank sein wird (erwartet bis zu 500.000 Datensätze), wird diese Suchmethode die beste für sich sein, oder wäre es besser, jede andere Suchmaschine wie Sphinx zu installieren? Oder falls nicht, wie kann man relevante Ergebnisse zeigen?

edit2: Für die Aufzeichnung trotz der Frage markiert werden als beantwortet, das Problem mit den MySQL-Trennzeichen bestehen bleibt, also wenn jemand einen Vorschlag, hat, wie Trennzeichen zu entkommen, wäre es die 500 Punkte geschätzt und Wert wird bei Anteil. Die sollution Ich fand das Suchresultates erhöhen wurde mit QUERY EXPANSION mit IN BOOLEAN MODE zu ersetzen, Operatoren, den Motor zu zwingen, die Worte ich brauchte, wie:

AND MATCH (
records_veiculos.titulo, records_veiculos.descricao 
) 
AGAINST (
'+passat +2.0 +tdi' IN BOOLEAN MODE 
) 

Es überhaupt nicht lösen, aber zumindest die Relevanz der Ergebnisse hat sich signifikant verändert.

Antwort

5

standardmäßig glaube ich, nur Indizes MySQL und passt Wörter mit 4 oder mehr Zeichen. Sie könnten auch versuchen, den Zeitraum zu entkommen? Es könnte dies ignoriert oder anderweitig als Stoppzeichen verwendet werden.

+2

+1 Ich kann nicht denken, warum dies negativ gewählt wurde. Sehr richtig. '2.0' maskiert oder nicht wird ignoriert, außer die serverweiten Standardeinstellungen wurden für' FULLTEXT' Indizes geändert. – Orbling

+1

@Yoda: Lesen Sie hier, besonders über 'ft_max_word_len': http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html – Orbling

+0

irgendwelche Vorschläge, wie man chars entkommen kann? Ich habe '\' versucht, ohne Erfolg. – yoda

4

Was ist der Match-Rang, den er dafür zurückgibt? Muss das Spiel alle "Wörter" enthalten, habe ich verstanden, dass es wie Google funktioniert hat und nur einige der Wörter übereinstimmen muss.

Nachdem gesagt, haben Sie eine Meinung über die Wirkung von WITH QUERY EXPANSION hinzufügen, die automatisch eine zweite Suche nach "verwandten" Wörtern, die möglicherweise nicht das, was Sie eingegeben haben, aber die Volltext-Engines wahrscheinlich verwandt ist.

Relevante Dokumentation: http://dev.mysql.com/doc/refman/5.1/en/fulltext-query-expansion.html

+1

Warum wurde dies negativ gewählt? – Orbling

+2

Fragte mich das Gleiche. Fest. Dumme Leute. – methodin

+0

@methodin Prost. – Orbling

7

Von der MySQL documentation on Fulltext search:; ‚‘

„Der FULLTEXT- Parser legt fest, wo Wörter beginnen und enden mit der Suche nach bestimmten Begrenzungszeichen zum Beispiel‚‘(Leerzeichen)‚‘(Komma), und (Zeitraum)."

Dies bedeutet, dass der Zeitraum die 2 und 0 begrenzt. So ist es nicht für "2.0" suchen; es sucht nach '2' und '0' und findet es nicht. WITH QUERY EXPANSION führt wahrscheinlich dazu, dass relevante verwandte Wörter auftauchen, wodurch die Notwendigkeit von "2" und "0" als einzelne Wörter in der Ergebnisrangliste vermieden wird. Ein Zeichenminimum kann ebenfalls erzwungen werden.

+0

irgendwelche Vorschläge, wie man chars entkommen? Ich habe '\' versucht, ohne Erfolg. – yoda

1

Das "." ist, was 2003 in Ihren Abfrageergebnissen übereinstimmt.

Wenn Sie vorhaben, sucht auf 3 Zeichen Text-Strings zu tun, sollten Sie ft_min_word_len = 3 in Ihrem mysql config Neustart mysql gesetzt. Andernfalls liefert eine Suche nach "tdi" Ergebnisse mit "TDI-", aber nicht nur mit "TDI", da Zeilen mit "TDI-" indiziert werden, aber "TDI" allein nicht.

Nachdem Sie diese Konfigurationsänderung vorgenommen haben, müssen Sie Ihren Index für diese Tabelle neu erstellen. (Achtung: Ihr Index könnte jetzt deutlich größer sein.)

+0

danke für die Eingabe, aber es wurde bereits die meisten dieser Dinge diskutiert, und das Problem bleibt. – yoda