2011-01-05 5 views
0

Я разрабатываю базу данных mysql, и мне бы хотелось, чтобы какой-либо ввод был эффективным способом хранения данных в блоге/статье для поиска.Mysql search design

В настоящее время я создал отдельный столбец, в котором хранится контент для поиска - нет повторяющихся слов, слов не более четырех букв и слов, которые слишком распространены. Таким образом, по сути, это список ключевых слов из оригинальной статьи. Также искали бы список тегов и поле заголовка.

Я не совсем уверен, как mysql индексирует полнотекстовые столбцы, так что хранение данных вроде бы было бы неэффективным или избыточным каким-то образом? Многие статьи относятся к одной теме, так что оценка будет зависеть от многих строк с похожими ключевыми словами?

Кроме того, для этого проекта такие решения, как sphinx, lucene или google custom seach не могут использоваться - только php & mysql.

Спасибо!

EDIT - Позвольте мне уточнить:

В принципе, я спрашиваю, какой путь полнотекстового бы обеспечить самые быстрые, наиболее значимые результаты: находя много примеров поискового термина в всех данных , или только одиночное ключевое слово среди нескольких других слов.

Я думаю, что отдельная таблица ключевых слов будет сверху, что мне нужно, поэтому я должен забыть столбец ключевых слов и поиск по этой статье или продолжать выбирать ключевые слова для каждой строки?

+0

использование полнотекстового поиска, множество примеров !!! – ajreal

+0

Почти тот же вопрос http://stackoverflow.com/questions/553055/best-full-text-search-for-mysql – FDisk

+0

Да, я видел этот вопрос, но на самом деле он не ответил на то, что я спрашивал, поэтому я отредактировал мой вопрос, чтобы уточнить. – neil

ответ

1

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

words: id | name 
articles: id | title | content 
articles_words: id | article_id | word_id | occurrences 

Теперь вы можете сканировать таблицу соединений и даже ранжировать статьи по вступлению этого слова и, возможно, поместить некоторое значение в том порядке, в котором слова были введены в строку запроса поиска.

Конечно, это очень академическое решение. Я не уверен, чего требует ваш проект, но индексирование FULLTEXT очень мощное, и вам всегда лучше использовать его в большинстве практических ситуаций.

HTH.

+0

Ваш тип таблицы должен быть myIsam, зависит от вашего соединения, это хорошее решение, но иногда ваш запрос немного медленный. У меня есть много примеров, использующих проблемные объединения, которые замедляют вашу систему. Будьте внимательны при использовании объединений. Это своего рода поисковая система, я думаю, что это должно быть нечто более сложное ... – B4NZ41