Keyword-Suche mit PHP MySql?
Habe ich Titel (varchar), Beschreibung (text), Schlagworte (varchar-Felder) in meine mysql-Tabelle.
Ich hielt keywords Feld, als ich dachte, ich wäre auf der Suche in diesem Feld nur. Aber jetzt kann ich verlangen, um die Suche unter allen drei Feldern. also für die keywords "wort1 wort2 wort3", meine Abfrage wird
SELECT * FROM myTable
WHERE (
name LIKE '%word1%' OR description LIKE '%word1%' OR keywords LIKE '%word1%'
OR name LIKE '%word2%' OR description LIKE '%word2%' OR keywords LIKE '%word2%'
OR name LIKE '%word3%' OR description LIKE '%word3%' OR keywords LIKE '%word3%')
AND status = 'live'
Sieht ein bisschen chaotisch, aber es funktioniert. Aber jetzt muss ich implementieren, die synonym-Suche. also für ein gegebenes Wort vorausgesetzt, es gibt ein paar Synonyme dieses query wird mehr chaotisch, wie ich eine Schleife durch alle Wörter. Die Anforderungen werden immer klarer, ich muss mich dieser myTable zu einigen anderen Tabellen als gut.
So
- Denken Sie, in der oben beschriebenen Weise ist chaotisch und wird zu Problemen führen, da die Daten wachsen?
- Wie kann ich vermeiden, dass die oben Durcheinander? Gibt es eine saubere Lösung, die ich gehen kann? Jedes Beispiel, das mir helfen wird.
- Gibt es eine andere Methode/Technik, die du empfehlen kannst zu mir?
Dank
BEARBEITEN
@Peter Stuifzand mir vorgeschlagen, dass ich erstellen Sie eine Tabelle search_index und speichern Sie alle 3 Felder (Titel,Schlagwort,desc) Infos und vollständige Textsuche. Ich verstehe, dass zusätzlich dieser Tabelle wird der Verweis auf myTable primären Schlüssel als gut.
Aber meine erweiterten Suche umfassen können beitreten Personen, die mit Kategorie-Tabelle, geographic_location Tabelle (für die Suche innerhalb von 10, 20 km etc.), Filterung von someother Kriterien und natürlich die Sortierung der Suchergebnisse. Meinst du mit mysql-fulltext-wird nicht verlangsamen?
InformationsquelleAutor TigerTiger | 2009-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihre Fragen sind uns aus der hand, manchmal ist es besser zu schreiben, Teile es in SQL und andere Teile in Ihrer Programmiersprache der Wahl.
- Und Sie können auch die Volltextsuche für die Suche. Sie können erstellen Sie separate Tabelle mit allen Feldern, die Sie suchen möchten, und fügen Sie die
FULLTEXT
modifier.InformationsquelleAutor Peter Stuifzand
Eine weitere Möglichkeit (manchmal ist es besser, aber es hängt...)
PS: Aber
MATCH(cols) AGAINST('expr')
ist vielleicht besser für Ihren Fall.InformationsquelleAutor Jet
Wenn überhaupt möglich, sollten Sie sich in Volltextsuche.
InformationsquelleAutor Paolo Bergantino
Angesichts der erweiterten Anforderungen, möchten Sie vielleicht erwägen, apache solr (siehe http://lucene.apache.org/solr/) es ist eine facettierte Suche-Motor, entwickelt für eine Volltextsuche. Es verfügt über eine RESTful-Schnittstelle zurückgeben kann XML oder JSON. Ich benutze es mit ein paar Projekten - funktioniert gut.
Der einzige Bereich, sehe ich Sie schlagen einige Probleme, die möglicherweise mit der Nähe zu suchen, aber mit einige zusätzliche Logik für den Aufbau der Abfrage sollte es funktionieren.
InformationsquelleAutor