2009-07-29 2 views
2

У меня есть поиск по местоположению website для города, мы начали собирать данные для всех возможных категорий в городе, таких как школы, колледжи, ведомственные магазины и т. Д. И сохраняли их информацию в отдельную таблицу, так как каждая запись имела разные данные, кроме их имени, адреса и номера телефона.Интеграция поиска на веб-сайте, где бэкенд MYSQL

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

  • Дизайн приложения является неправильным, и мы писали запросы, как выбрать * от мастера, где имя как «$% входными%», во всем, так как наша базе данных MYSQL и PHP на ServerSide , есть ли какие-либо предложения для меня улучшить дизайн системы?
  • Люди хотят больше функций, таких как разбиение ключевых слов и ранжирование их в соответствии с релевантностью и т. Д., Есть ли готовая инфраструктура, которая запускает поиск по базе данных.
  • Я попытался использовать полнотекстовый поиск в MYSQL, и это кажется эффективным для меня, достаточно ли этого?

Исправьте меня, если я ошибаюсь, я просмотрел Lucene и Google Custom Search, не работают ли они над созданием индекса, сканируя существующие веб-страницы и строя свой собственный индекс? У меня есть коллекция таблиц в базе данных mysql, на которой я должен применять поиск. Какие у меня варианты?

ответ

3

Чтобы решить ваши вопросы:

  1. Использование% вход% очень плохой. Это приведет к полному сканированию таблицы по каждому запросу. При любом количестве нагрузки или даже на удаленном большом наборе данных ваш сервер БД будет подавлен.

  2. Только RDBMS не является хорошим решением для этого. Вы ищете подходящее место, ища отдельное решение для поиска. Хорошо, что хорошо работает с вашей РСУБД; то, что работает внутри РСУБД, не будет делать то, что вам нужно.

  3. Полный текст поиска в MySQL работает для самых простых поисков ключевых слов, не более того. Объем полезности чрезвычайно ограничен - вам нужна очень предсказуемая модель использования, чтобы использовать встроенный поиск. Это называется «поиск», но на самом деле это не поиск того, как многие думают об этом. По сравнению с качеством результатов поиска, которые мы ожидаем от Google и Bing, это не сравнится. В этом смысле слова «поиск» это нечто другое - например «Блокнот против Слова». Они оба - это вещи, которые нужно вводить, но это все.

Что касается отдельных систем для обработки поиска, Lucene очень хорошо. Lucene работает, но вы хотите, чтобы она работала, по существу. Вы можете взаимодействовать с ним программно, чтобы вставлять индексируемые документы. Аналогично, Google Appliance (не Google Custom Search) могут быть предоставлены прямые мета-каналы, которые раскрывают все, что вы хотите проиндексировать, например данные непосредственно из базы данных.

+0

Как я могу сделать работу lucene в базах данных? –

+0

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

2

Взгляните на сфинкса: http://www.sphinxsearch.com/

За их сайт:

Как реализовать полнотекстовый поиск для этой таблицы 10+ миллионов строк, идти в ногу с нагрузкой, и оставаться актуальными ? Сфинкс хорош в таких загадках.

Это довольно популярный с большим количеством людей в сообществе рельсы прямо сейчас, и все они бредят о том, как удивительным это :)