Мои результаты мне давно известны,
я только не знаю, как я к ним приду.
К. Гаусс
У меня плохая память, я конечно над ней работаю, но все же она плохая. Вообще все говорят, что это отличная отмазка, и снятие любой ответственности. По сути да, отмазка конечно супер, но отвечать все равно приедается. Собственно одна из причин того, что я завел этот блог и есть моя плохая память, т.к. до многих вещей необходимо доходить по нескольку раз. Пока ты просто не возьмёшь это и где то не запишеш. Главное не забывать в нем писать
Доделал один сайт, и поиск к нему решил прикрутить не стандартный фуллтекст индекс из PostgreSQL а прицепить сюды енджин сторонний. Выбор мой остановился на Shinx ( сразу скажу, я не проводил углублённых анализов, на тему какой же движок заюзать. Это не надо пока. ) . Да, и есть маленькое затруднение в поиске инфы — я когда гуглил, то все время переципался через генератор документации для питона, с таким же названием.
Так. От слов к делу.
на форуме у них нашёл описание настройки под Debian. Так что ниже кратко:
-
adduser –system –home /var/sphinx –uid 999 –disabled-password –disabled-login sphinx
-
-
mkdir /var/shpinx/bin
-
mkdir /var/shpinx/etc
-
mkdir /var/shpinx/log
-
mkdir /var/shpinx/lib
-
mkdir /var/shpinx/run
-
-
cd /tmp
-
wget http://sphinxsearch.com/downloads/sphinx-0.9.7-rc2.tar.gz
-
tar -xzvf sphinx-0.9.7-rc2.tar.gz
-
cd sphinx-0.9.7-rc2
-
./configure –with-pgsql –with-pgsql-includes=/usr/include/postgresql/ –with-pgsql-lib=/usr/lib/postgresql/8.3/lib/
-
make
-
-
wget http://www.klaus.gr/pub/sphinx
-
mv sphinx /etc/init.d/
-
chmod 755 /etc/init.d/sphinx
-
ln -s /etc/init.d/sphinx /etc/rc2.d/S92sphinx
-
chown -R sphinx /var/sphinx
-
chmod -R 711 /var/sphinx/
-
cd /var/spinx/etc
-
cp -p sphinx.conf.dist sphinx.conf
-
vim sphinx.conf
Далее в секции searchd должно быть:
-
pid_file = /var/sphinx/run/searchd.pid
-
query_log = /var/sphinx/log/query.log
-
log = /var/sphinx/log/searchd.log
-
address = 127.0.0.1
В секции index:
-
path = /var/sphinx/lib/sphinx
И запуск
-
/etc/init.d/sphinx start
На этом месте должен уже работать демон.
Вот скрипт пепеиндексирования всех индексов
-
/var/sphinx/bin/indexer –all –rotate –config /var/sphinx/etc/sphinx.conf
Далее добавляем свой индекс:
-
source board_posts
-
{
-
type = pgsql
-
sql_host = 127.0.0.1
-
sql_user = oduvan
-
sql_pass = gravicapa
-
sql_db = eliteboard
-
sql_port =
-
sql_query_pre =
-
sql_query_post =
-
sql_query = \
-
SELECT id, title, text, tags, location, to_contact, how_contact, owner_id, count_files_other, count_files_images, create_time FROM board_posts
-
sql_query_info = SELECT * FROM `board_posts` WHERE `id` = $id
-
# ForeignKey's
-
sql_attr_uint = owner_id
-
# DateField's and DateTimeField's
-
sql_attr_timestamp = create_time
-
}
-
-
-
index board_posts
-
{
-
source = board_posts
-
path = /var/sphinx/data/board_posts
-
docinfo = extern
-
morphology = none
-
stopwords =
-
min_word_len = 2
-
min_prefix_len = 0
-
min_infix_len = 0
-
charset_type = utf-8
-
}
после этого создаем папку /var/sphinx/data/, переиндексируем, разрешим демону пользоваться нашими файлами
-
chown -R sphinx /var/sphinx
и передерним демона:
-
/etc/init.d/sphinx restart
Теперь надо рассказать джанге, как им надо пользоваться. Инсталим django-sphinx
-
cd /tmp
-
svn checkout http://django-sphinx.googlecode.com/svn/trunk/ django-sphinx
-
cd django-sphinx
-
sudo python setup.py install
я ставил 0.9.8, так что в settings.py вашего проекта прописываем :
SPHINX_API_VERSION = 0×113
в моделе, по которой вы хотите вести поиск привязываем свойство, с указанием весов полей.
-
class MyModel(models.Model):
-
search = SphinxSearch('board_posts',weights={
-
'title': 100,
-
'tags': 80,
-
'description': 40,
-
})
Вот и все. Последнее — это выполнить поиск:
-
queryset = MyModel.search.query('query')
Вот так кратко, сухо, критикуйте!



Recent Comments