Добавление функционала поиска.

Для тех, кому очень нехватает функционала поиска начинаем тестирования функционала «поиск пользователей» (извините за каламбур :) ) при помощи Сфинкса.

шаблон пока стандатный. в ToDo добавить дату регистрации, пол, а также «добавить в друзья» и «написать ЛС»

Ищет по логину и Настоящему имени пользователя. Подозреваю, что запрос к базе неоптимизированный, если кто-нибудь поможет с оптимизацией, буду рад. Крон работает по схеме: раз в час топики, раз в 10 минут комментарии, раз в 5 минут пользователи. Также хочу добавить, хост с каналом 256Кбит/с в обе стороны с ограничением в 10 гигов и отсутствующим кэшем, так что лишний раз лайвстритэффект устраивать не стоит :)

Если все пойдет гладко (и что самое главное: если это хоть кому то нужно), то вечером 11 числа выложу в модули, либо передам Максиму aka ort, для включения в основной функционал livestreet.

вобщемто хватит прелюдий, тестируем altmusic.ath.cx/search больше недоступно.

ЗЫ. также хочу сказать спасибо Vilz и eXtravert за помощь в предварительном тестирование и отлове багов. и за всю остальную помощь:)
UPD: к сожалению в связи с выходом версии 0.3 приходится переделывать + занимаюсь оптимизацией запроса к базе. ждем в ближайшие пару дней с бонусом)
UPD2: Наконец то добил поиск по блогам.
UPD3: Ссылка на модуль livestreet.ru/addons/22/

10 комментариев

avatar
полезнейшая фича!
avatar
Юр какие успехи? Есть работоспособный вариант для версии 0.3?
avatar
тьфу ты блин в модулях отыскался.
avatar
Подскажите кто использует под 3.0.1 будет работать? Спасибо.
avatar
хмм… под 0.3.1 и делалось. под транк пока рановато делать :)
avatar
Поставил, работает. Пара вопросов, он пользователей должен просто по имени искать? Что то у меня не ищет, пишет ничего не нашлось. И такой вопрос в readme модкуля сказано добавить в крон
/usr/local/bin/indexer --rotate blogsIndex > /dev/null 2>&1
/usr/local/bin/indexer --rotate usersIndex > /dev/null 2>&1

Больше ничего не надо?
Как насчет топиков и комментов?
Может еще добавить /usr/local/bin/indexer --all --rotate

Спасибо.

avatar
итак. проведу небольшой ликбез.

После установки сфинкса в директории, куда он установится ( в дебиане/убунту это обычно /usr/local/bin/, у бздунов, если не ошибаюсь /opt/local/bin/) создается три приложения:
1) searchd. Это, собственно, сам демон Sphinx'a.
2) search. Утилита для поиска из консоли
3) и файл indexer, который производит индексацию БД.

Для чего же нужен indexer?
Итак, как уже писал товарищ kruft вот тут
командой /usr/local/sphinx/bin/indexer --all мы запускаем первичную индексацию БД, для того, чтобы Сфинксу было где искать. После чего запускаем сам Сфинкс
Ну а что происходит, когда мы запускаем
/usr/local/bin/indexer --rotate blogsIndex > /dev/null 2>&1
?
файл indexer добавляет полученные за n часов (минут, в зависимости от настройки cron) к уже существующим), в данном случае для индексов blogs (т.е. поиска по блогам) и перенапрявляет вывод приложения в никуда (> /dev/null 2>&1).
следовательно. если вы хотите обновлять индексы не только по блогам, то вам следует добавить и остальные индексы (такие как usersIndex, а также указанные в вышеприведенном мануале topicIndex и commentsIndex)
Ну и напоследок.
Может еще добавить /usr/local/bin/indexer --all --rotate

По этому поводу уже говорили
Самый простой способ запустить индексацию — это выполнить или добавить в планировщик команду
/usr/local/sphinx/bin/indexer --all
, однако данный способ является сильно неоптимальным, поскольку топики обновляются (точнее появляются новые) значительно реже, нежели комментарии, поэтому частоту обновления индекса комментариев должны быть больше.

правда тут небольшая ошибка была допущена.
данную команду нельзя запускать при включенном сфинксе, он просто не отработает :)
правильней команда будет
/usr/local/bin/indexer --all --rotate, но тут уже как вы пожелаете. Управление с помощью индексом позволит вам распределить нагрузку, поскольку действительно топики, блоги и юзеры появляются гораздо реже комментариев.
avatar
Спасибо за ликбез, все поставил как написано в инструкции модуля. Что то на любой поисковый запрос выводит «Удивительно, но поиск не дал результатов».
Команды:
/usr/local/bin/indexer --rotate blogsIndex
/usr/local/bin/indexer --all --rotate
Команда запуска демона /usr/local/bin/searchd
выдает такое:
using config file '/usr/local/etc/sphinx.conf'...
FATAL: failed to lock pid file '/var/log/sphinx/searchd.pid':
Resource temporarily unavailable (searchd already running?)


Ну это может и правильно, у меня /usr/local/bin/searchd в rc.local прописан.

Файлы, blogsIndex.spa, blogsIndex.spd, blogsIndex.sph, blogsIndex.spi, blogsIndex.spm, blogsIndex.spp и соответственно blogsIndex.new, commentsIndex, commentsIndex.new, topicIndex, topicIndex.new, usersIndex, usersIndex.new в папке /usr/local/SphinxIndex/ создаются.

Что может быть? Подскажите пожалуйста.

avatar
а что выводит
/usr/local/bin/indexer --all --rotate?
avatar
Выдает:
Sphinx 0.9.8.1-release (r1533)
Copyright © 2001-2008, Andrew Aksyonoff

using config file '/usr/local/etc/sphinx.conf'...
indexing index 'topicsIndex'...
collected 360 docs, 1.3 MB
collected 780 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.1 Mhits, 100.0% done
total 360 docs, 1321380 bytes
total 0.477 sec, 2771676.25 bytes/sec, 755.12 docs/sec
indexing index 'commentsIndex'...
collected 11 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 11 docs, 1203 bytes
total 0.010 sec, 120300.00 bytes/sec, 1100.00 docs/sec
indexing index 'usersIndex'...
collected 22 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 22 docs, 214 bytes
total 0.010 sec, 21400.00 bytes/sec, 2200.00 docs/sec
indexing index 'blogsIndex'...
collected 15 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 15 docs, 2395 bytes
total 0.012 sec, 203916.97 bytes/sec, 1277.14 docs/sec
rotating indices: succesfully sent SIGHUP to searchd (pid=5837).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.