2009-06-12 10 views
0

Ich habe eine Tabelle voller Domain-Namen. Ich würde gerne eine Suche durchführen, die einige relevante Ergebnisse liefert. Mein Problem ist, dass wenn ich eine Suche nach "cool" mache ich möchte, dass es "cooldomain.com" zurückgibt, was eine Volltextsuche, es sei denn, ich mache es falsch, nicht.Mysql Suche nach Domain-Namen

Gibt es irgendwelche Volltextoptionen, von denen ich nicht weiß, dass dies das erreichen wird? Wenn nicht, wie würde ich es tun?

Antwort

0

I LIKE hier verwenden würde, die Volltextsuche ist zum Abgleichen gegen volle Wörter oder Ausdrücke, die Erweiterung der Suchanfrage, etc. Und ich denke, die * operator kann nur als Zusatz verwendet werden, wenn mit MATCH, so werden Sie imcool.com verpassen ...

Ich denke, Sie müssen mehr Informationen sammeln, um eine Relevanz Sortierung zu machen.

Edit: Wenn Sie einen Index verwenden möchten, können Sie auch die Worte der Domäne in einer anderen Spalte speichern, und auf diesem die Macht der Volltextsuche verwenden ...

+0

* seufz * hoffte auf eine bessere Lösung als das. Ich habe eine separate Spalte, aber es ist Benutzer eingereicht, so kann ich nicht garantieren, dass sie es richtig machen werden. –

0

Gute alte wird übereinstimmen, aber nicht "Relevanz" zurück - Ich bin mir nicht sicher, wie Sie das definieren würden.

+0

die problme mit dieser ist, dass LIKE ‚% cool%‘ nicht den verfügbaren Index verwenden würde, erheblich die Suche verlangsamen, wenn ich am Ende mit einem ausreichend großen Tisch. –

0

Probieren Sie etwas wie

SELECT * FROM domains WHERE domain_name LIKE 'cool%'; 
+0

"cooldomain.com" war nur ein Beispiel. WIE "cool%" passt nicht zu "awesomecool.com". –

+0

Sie können auch jede Domäne verarbeiten, indem Sie Teilzeichenfolgen der Länge 1 in der Länge der vollständigen Domäne in einer anderen Tabelle speichern und jede Teilzeichenfolge mit der Hauptdomäne verknüpfen. Dies würde beim Speichern jeder Domäne mehr Verarbeitung erfordern, würde jedoch die Suche ziemlich schnell machen. für cooldomain.com (zum Beispiel), speicherst du 'c', 'o', ..., 'co', 'oo', ..., 'coo', ..., 'cool', ' oold ', ..., etc ..., so dass eine Übereinstimmung nur mit einer exakten Übereinstimmung und nicht mit einer Mustererkennung erzielt wird. Wie ein Suchindex, aber für Zeichen der Zeichenfolge. –

0

Sie müssen einen Volltextindex auf den Tisch zu setzen und dann so etwas tun:

SELECT *, MATCH(domain_name) AGAINST ('{search term here}' IN BOOLEAN MODE) as Relevance 
FROM domains 
WHERE MATCH (domain_name) AGAINST('{search term here}' IN BOOLEAN MODE) 
ORDER BY Relevance DESC 
Verwandte Themen