Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как лучше сделать поиск по сайту?

367
26 мая 2011 года
Meatcoins
303 / / 18.01.2006
Первая версия у меня была такая:
Бегать по всем дирректориям открывать все файлы и, если preg_match=true, то выводим результат.
Работало очень долго ~ 10-ки секунд.
Сейчас:
Валим все страницы в кэш-файл заранее. Получается массив-файл.
Делаем file_get_contents и preg_match. Считаем колличество совпавших слов и на основе колличества совпавших слов выводим первыми те страницы, где совпадений больше.
Скорость работы - средняя ~ 1-цы секунд.
Вопрос:
А будет ли быстрее работать, если страницы поместить в базу MySQL?
А какой тип базы лучше выбрать InnoDB или MyISAM?
Структура базы предполагаемая:
Четыре поля:
id
адрес страницы типа CHAR
псевдоним страницы типа CHAR
содержание страницы типа MEDIUM TEXT

С MyISAM есть какой-то неприятный момент... по-моему нельзя делать связанные таблицы.
А в InnoDB с поиском проблемы...
В InnoDB можно искать как-то так:
SELECT * FROM some_table WHERE text_field REGEXP "некое выражение"
А на много ли эта конструкция медленнее, чем стандартный поиск в MyISAM?
244
26 мая 2011 года
UAS
2.0K / / 19.07.2006
MyISAM более быстрый, чем InnoDB. Зато в InnoDB транзакции есть.
С другой стороны, если у вас материала будет тысяч сто, то тогда имеет смысл думать что быстрее, что медленнее.
Правильная расстановка индексов - и будет поиск работать максимум - десятые доли секунды.

REGEXP не обязательно, достаточно LIKE, если просто поиск фразы в тексте.
Я привык все сразу в InnoDB пихать - особых потерь в скорости не терял никогда.
274
26 мая 2011 года
Lone Wolf
1.3K / / 26.11.2006
Лучше в sphinx с последними версиями можно работать, как с SQL-ем.
367
27 мая 2011 года
Meatcoins
303 / / 18.01.2006
Цитата:
Лучше в sphinx с последними версиями можно работать, как с SQL-ем.


http://livestreet.ru/blog/dev_documentation/366.html
Поисковый демон...
Да, на своём сервере можно, наверное, а на стороннем hosting'е вряд ли.

Цитата:

MyISAM более быстрый, чем InnoDB. Зато в InnoDB транзакции есть.
С другой стороны, если у вас материала будет тысяч сто, то тогда имеет смысл думать что быстрее, что медленнее.
Правильная расстановка индексов - и будет поиск работать максимум - десятые доли секунды.

REGEXP не обязательно, достаточно LIKE, если просто поиск фразы в тексте.
Я привык все сразу в InnoDB пихать - особых потерь в скорости не терял никогда.



А вот если конкретнее:
Допустим, создаём базу MyISAM:

Код:
CREATE TABLE pages
(id SERIAL,
name VARCHAR(1024),
alter VARCHAR(1024),
text MEDIUMTEXT,
PRIMARY KEY id)
ENGINE MyISAM CHARACTER SET utf8;

[добавляем данные]

ALTER TABLE pages ADD FULLTEXT (text);
SELECT text FROM pages WHERE MATCH (text) AGAINST (поисковый запрос);

В итоге получаем отсортированный список страниц, упорядоченный в порядке релевантности.

Допустим, создаём базу InnoDB:
Код:
CREATE TABLE pages
(id SERIAL,
name VARCHAR(1024),
alter VARCHAR(1024),
text MEDIUMTEXT,
PRIMARY KEY id)
ENGINE InnoDB CHARACTER SET utf8;

[добавляем данные]

SELECT text FROM pages WHERE REGEXP 'поисковый.+запрос';

А в этом случае, наверное, страницы не будут упорядочены согласно релевантности запросу.
Чтобы упорядочить их по релевантности, наверное, придётся дополнительно считать как-то колличество совпавших слов.
Так как же лучше поступить?
12
27 мая 2011 года
alekciy
3.0K / / 13.12.2005
Что только люди не придумают, лишь бы sphinx не учить :D

Есть задача и есть инструмент для её решения, и тут sphinx самое то. И поставить его на недорогой vds вполне реально ибо я в жизни не поверю, что сумма в ~300-400 руб/мес разорительна.
367
30 мая 2011 года
Meatcoins
303 / / 18.01.2006
Цитата:
Что только люди не придумают, лишь бы sphinx не учить

Есть задача и есть инструмент для её решения, и тут sphinx самое то. И поставить его на недорогой vds вполне реально ибо я в жизни не поверю, что сумма в ~300-400 руб/мес разорительна.



Virtual dedicated server...
Если б был - может и не проблема.
Но переходить на vds ради того, чтобы использовать sphinx для поиска.
Что-то неохото...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог