Что такое Сфинкс?
Sphinx ( SQL Phrase Index) — система , разработанная Андреем Аксеновым и распространяемая по лицензии . Отличительной особенностью является высокая скорость индексации и поиска, а так же интеграция с существующими СУБД (, ) и API для распространённых языков веб-програмирования (официально поддерживаются , , ; существуют реализованные сообществом API для , , и ) (с)википедия
Зачем его ставить?
Убеждаемся, что никакая нечисть не убрала дефолтовые отметки с mysql и iconv. Если убрала - ставим.
Настройка
Создаем конфигурационный файл /usr/local/etc/sphinx.conf для поиска по форуму
База тем обновляется каждые 15 минут. Все базы обновляются раз в сутки в 3 ночи
Подключение Сфинкса как поисковой системы к ТП2
config.php
Sphinx ( SQL Phrase Index) — система , разработанная Андреем Аксеновым и распространяемая по лицензии . Отличительной особенностью является высокая скорость индексации и поиска, а так же интеграция с существующими СУБД (, ) и API для распространённых языков веб-програмирования (официально поддерживаются , , ; существуют реализованные сообществом API для , , и ) (с)википедия
Зачем его ставить?
- Высокая скорость индексации (до 10-15 МБ/сек на ядро);
- Высокая скорость поиска (до 150—250 запросов в секунду на каждое ядро с 1000000 документами);
- Высокая масштабируемость (крупнейший известный кластер индексирует до 3000000000 документов и поддерживает более 50 миллионов запросов в день);
- Распределенная возможность поиска;
- Поддержка нескольких полей полнотекстового поиска в документе (до 32 по умолчанию);
- Поддержка нескольких дополнительных атрибутов для каждого документа (то есть группы, временные метки и т. д.);
- Поддержка ;
- Поддержка однобайтовых кодировок и ;
- Поддержка морфологического поиска — имеются встроенные модули для английского, русского и чешского языков; доступны модули для французского, испанского, португальского, итальянского, румынского, немецкого, голландского, шведского, норвежского, датского, финского, венгерского языков;
- Родная поддержка (всех типов таблиц, в том числе , , NDB, архив и т. д.);
- Родная поддержка ;
- Поддержка совместимых баз данных (, и т. д.);
(с) википедия
Код:
# cd /usr/ports/textproc/sphinxsearch
# make config
Код:
# make install
...
#rehash
Создаем конфигурационный файл /usr/local/etc/sphinx.conf для поиска по форуму
Код:
source torrentpier
{
type = mysql
sql_host = localhost
sql_user = user
sql_pass = pass
sql_db = dbase
sql_query_pre = SET NAMES utf8
sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET CHARACTER_SET_CLIENT=utf8
}
source topics: torrentpier
{
sql_query = \
SELECT topic_id, forum_id, topic_title \
FROM bb_topics \
WHERE topic_id BETWEEN $start AND $end
sql_query_range = SELECT MIN(topic_id), MAX(topic_id) FROM bb_topics
sql_range_step = 100000
sql_attr_uint = forum_id
sql_ranged_throttle = 50
sql_query_info = SELECT * FROM bb_topics WHERE topic_id = $id
}
source posts: torrentpier
{
sql_query = \
SELECT pt.post_id, pt.post_text, t.topic_title, t.topic_id, t.forum_id \
FROM bb_posts_text pt \
LEFT JOIN bb_topics t on pt.post_id = t.topic_first_post_id \
WHERE pt.post_id BETWEEN $start AND $end
sql_query_range = SELECT MIN(post_id), MAX(post_id) FROM bb_posts_text
sql_range_step = 100000
sql_attr_uint = topic_id
sql_attr_uint = forum_id
sql_ranged_throttle = 50
sql_query_info = SELECT * FROM bb_posts_text WHERE post_id = $id
}
source users: torrentpier
{
sql_query = \
SELECT user_id, username \
FROM bb_users \
WHERE user_id BETWEEN $start AND $end
sql_query_range = SELECT 1, MAX(user_id) FROM bb_users
sql_range_step = 1000
sql_query_info = SELECT * FROM bb_users WHERE user_id = $id
}
index topics
{
docinfo = extern
morphology = stem_enru
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42C->U+430..U+44C, U+42E..U+42F->U+44E..U+44F, U+430..U+44C, U+44E..U+44F, U+0401->U+0435, U+0451->U+0435, U+042D->U+0435, U+044D->U+0435
min_prefix_len = 0
min_infix_len = 0
min_word_len = 1
min_stemming_len = 4
enable_star = 1
phrase_boundary = :, - , . , $
phrase_boundary_step = 1
html_strip = 1
path = /var/db/sphinxsearch/data/topics
source = topics
}
index posts: topics
{
path = /var/db/sphinxsearch/data/posts
source = posts
}
index users: topics
{
path = /var/db/sphinxsearch/data/users
source = users
}
indexer
{
mem_limit = 256M
}
searchd
{
listen = 127.0.0.1:3312
log = /var/db/sphinxsearch/log/searchd.log
query_log = /var/db/sphinxsearch/log/query.log
read_timeout = 5
max_children = 15
max_matches = 5000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
pid_file = /var/db/sphinxsearch/searchd.pid
}
Прошу обратить внимание на пути!
1. Пути в вашем конкретном случае (другая ОС или вообще личные предпочтения по размещению) будут отличаться. В моем случае в /var/db/ живут все базы данных.
2. Папки data и log создайте вручную
Запуск
Индексируем в первый раз
Код:
# indexer --all
Если все нормально, вам отрапортуют об успешном завершении и покажут число обработанных записей. Если нет - ищите где ошиблись в конфигурации
Ну и запускаем собственно сервер
Код:
# searchd
Обновление баз
Для актуальности поиска, необходимо в крон добавить следующее
Код:
*/15 * * * * /usr/local/bin/indexer topics --rotate
0 3 * * * /usr/local/bin/indexer --all --rotate
База тем обновляется каждые 15 минут. Все базы обновляются раз в сутки в 3 ночи
Подключение Сфинкса как поисковой системы к ТП2
config.php
Код:
$bb_cfg['search_engine_type'] = 'sphinx';