2010-05-31 2 views

ответ

0

Это вы что искали?

SELECT username FROM users WHERE username LIKE '%value%'; 
+0

мне это нужно вид вещи SELECT * FROM бизнеса WHERE имя LIKE 'Al%' заказ по DESC имя, длина (имя); Это не работает – mahela

+0

как об этом ? SELECT * FROM 'business' WHERE name LIKE 'AI%' ORDER BY name DESC, length (name) DESC – ricecake5

1

Если вы просите полнотекстовой поиск с результатами упорядоченных по релевантности, то да есть решения .. но это не тривиально. Это более «корпоративные» решения на уровне:

Solr - http://lucene.apache.org/solr/

Solr является популярным, молниеносно открытым исходным кодом поисковой системы предприятия платформы от проекта Apache Lucene. Его основные функции включают в себя мощный полнотекстовый поиск, подсветку выделения, фасетный поиск, динамическую кластеризацию, интеграцию с базой данных и обработку документов (например, Word, PDF). Solr обладает высокой масштабируемостью, обеспечивая распределенный поиск и репликацию индекса, а также обеспечивает функции поиска и навигации многих крупнейших интернет-сайтов в мире.

Sphinx - http://sphinxsearch.com/

Как правило, это автономный поисковая система, предназначенная для обеспечения быстрой, размер эффективных и соответствующих полнотекстовый поиск функций в другие приложения. Sphinx был специально разработан, чтобы хорошо интегрироваться с базами данных SQL и скриптовыми языками. В настоящее время встроенные источники данных поддерживают выборку данных через прямое соединение с MySQL или PostgreSQL или с использованием механизма XML-канала (канал для индексатора в специальном формате на основе XML, который распознает Sphinx).

Невозможно сузить правильное решение, не зная больше о ваших системах и ограничениях.

+0

Я не прошу полного текстового поиска – mahela

+0

Вы попросили лучший матч, который подразумевает поиск релевантности. –

0

сделать это поэтапно:

a. первый взгляд для точного соответствия (SELECT * FROM бизнес WHERE имя = 'значение')

, если это не удается, то:

б. разделите строку поиска на слова, запустите запрос для каждого слова (добавьте результаты для каждого слова в массив, где ключ является идентификатором строки, а значение является релевантностью, поскольку каждое найденное слово увеличивает релевантность на 1, тогда вы можете просто сортировать ваш массив (т.е. большинство слов соответствует = высокая релевантность)

б очень inneficient и на самом деле вы должны использовать полный текст (или MySQL построен в полном тексте или сфинкса/Lucene и т.д., как указано выше)

+0

Теперь мне приходится иметь дело с 100 000 строк, в будущем нужно иметь дело с более чем 10 миллионами. Возможно ли выполнить «orderby», используя ту же самую длинную длину и алпабский порядок? – mahela

+0

вы не сможете эффективно использовать LIKE на 10 миллионов строк, почему вы не можете использовать полный текст? – mononym