2009-06-12 3 views
0

У меня есть таблица, полная доменных имен. Я бы хотел сделать поиск, который возвращает на него какие-то результаты релевантности. Моя проблема заключается в том, что если я сделаю поиск «круто», я хочу, чтобы он вернул «cooldomain.com», который полнотекстовый поиск, если я не ошибаюсь, не будет.Mysql Поиск доменных имен

Есть ли какие-либо варианты полного текста, о которых я не знаю, что это выполнит? Если нет, как бы я это сделал?

ответ

0

Я хотел бы использовать LIKE здесь, полнотекстовый поиск для сопоставления с полными слов или выражений, расширение запросов и т.д. И я думаю, что * operator может быть использован только в качестве суффикса когда это используя MATCH, чтобы вы пропустили imcool.com ...

Я думаю, вам нужно будет собрать дополнительную информацию, чтобы сделать сортировку релевантности.

Edit: Если вы хотите использовать индекс, вы можете также хранить слова домена в другой колонке, и использовать силу полнотекстового поиска на этом ...

+0

* sigh * надеялся на лучшее решение, чем это. У меня есть отдельная колонка, но она отправлена ​​пользователем, поэтому я не могу гарантировать, что все будет правильно. –

0

Хорошо старый WHERE domain LIKE '%cool%' будет соответствовать, но не возвращает «релевантность» - я не уверен, как вы это определяете.

+0

problme с тем, что LIKE «% прохладное%» не будет использовать доступный индекс, замедляя поиск значительно, если я в конечном итоге с достаточно большим столом. –

0

Try что-то вроде

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

«cooldomain.com» был всего лишь примером. LIKE 'cool%' не соответствует "awesomecool.com". –

+0

Вы также можете обрабатывать каждый домен, сохраняя подстроки длиной 1 до длины полного домена в другой таблице, связывая каждую подстроку обратно в основной домен. Это потребует большей обработки при хранении каждого домена, но явно сделает поиск довольно быстрым. для cooldomain.com (например) вы бы сохранили 'c', 'o', ..., 'co', 'oo', ..., 'coo', ..., 'cool', ' oold ', ... и т. д., что делает соответствие только для точного соответствия, а не для соответствия шаблону. Как индекс поиска, но для символов строки. – 2009-06-12 22:56:50

0

Вам нужно будет установить полнотекстовый индекс в таблицу, а затем сделать что-то вроде этого:

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 
Смежные вопросы