Sphinx. Установка и первичная настройка
68
Итак, начинаю серию топиков по прикручиванию поисковой машины Sphinx к нашему любимому движку.
Сфинкс является системой полнотекствого поиска, распространяемой под лицензией GPL второй версии.
Сфинкс позволяет добавить функции быстрого полнотекстового поика в сторонние приложения и был специально спроектирован для взаимодействия с реляционными базами данных и скриптовыми языками программирования. На данный момент движок позволяет индексировать данные, хрянящиеся в базах данных MySQL, PostgreSQL или в любом другом формате через XML-шлюз.
Топаем по и скачиваем себе файл с исходниками последней версии Sphinx-а. Актуальной, на данный момент, является версия 0.9.8.1, взять которую можно .
Распаковываем архив стандартной командой (
Для успешной сборки Сфинкса в системе должны быть установлены и доступны текущему пользователю:
* компилятор С++ (вполне подойдет стандартный из коллекции компиляторов GNU)
* программа make, например, из набора GNU
Если есть необходимость указать какие-нибудь опции компиляции, например, путь до библиотеки MySQL или пути для установки, то передаем их конфигурационному скрипту. Префикс «по-умолчанию» зависит от вашей системе (в *BSD — /usr/local..., а в разных Linux-ах по разному, но велика вероятность, что конфиги лягут в /etc/sphinx, а бинарники в /usr/local/bin). Для простоты дальнейшего повествования, предположим, что конфиги у вас будут лежать в каталоге /usr/local/sphinx/etc, а бинарники в /usr/local/sphinx/bin.
На этом этап установки завершен.
Для начала стоит сказать, что конфигурация поисковой машины Сфинкс оперирует двумя фундаментальными параметрами:
* Источник (source) — описание объектов индексируемых данных, параметры доступа к ним и указание поисковой машине аттрибутов данных, их типов и правил их анализа.
* Индекс (index) — хранилище индекса данных, описанных в источнике (да, тавтология :) ). В качестве данных, хранимых в индексе, указывается ранее описанный источник.
Исходя из написанного выше, для настройки Сфинкса на индексацию базы данных Живой Улицы, нам необходимо описать источники и индексы. В данном топике будет приведен пример конфигурационного файла с индексами комментариев и топиков. Расширенную настройку каждый сможет провести самостоятельно, в зависимости от требований проекта.
Со сфинксом поставляется конфигурационный файл по-умолчанию, однако он нам не пригодиться. При первичной настройке Вы можете воспользоваться моим, который приведен ниже. Однако учтите, что в нем необходимо прописать параметры доступа к базе данных и пути до каталогов, в которых будут храниться индексы.
Для осуществления того, что написано в заголовке раздела, необходимо в один из стартовых скриптов системы, например, /etc/rc.local для ОС Linux вставить код:
Самый простой способ запустить индексацию — это выполнить или добавить в планировщик команду
Для различной частоты индексации объектов разного типа, в планировщик необходимо добавить следующие инстукции:
(означает индексацию топиков каждые 3 часа с запуском процесса на 12ой минуте часа и индексацию комментариев каждые 50 минут)
0 Что есть Sphinx и с чем его едят
Сфинкс является системой полнотекствого поиска, распространяемой под лицензией GPL второй версии.
Сфинкс позволяет добавить функции быстрого полнотекстового поика в сторонние приложения и был специально спроектирован для взаимодействия с реляционными базами данных и скриптовыми языками программирования. На данный момент движок позволяет индексировать данные, хрянящиеся в базах данных MySQL, PostgreSQL или в любом другом формате через XML-шлюз.
1 Установка
Топаем по и скачиваем себе файл с исходниками последней версии Sphinx-а. Актуальной, на данный момент, является версия 0.9.8.1, взять которую можно .
Распаковываем архив стандартной командой (
tar zxf /path/to/SphinxSourceFile.tar.gz), переходим в новый каталог sphinx и выполняем «волшебную последовательность» (./configure; make; make install).Для успешной сборки Сфинкса в системе должны быть установлены и доступны текущему пользователю:
* компилятор С++ (вполне подойдет стандартный из коллекции компиляторов GNU)
* программа make, например, из набора GNU
Если есть необходимость указать какие-нибудь опции компиляции, например, путь до библиотеки MySQL или пути для установки, то передаем их конфигурационному скрипту. Префикс «по-умолчанию» зависит от вашей системе (в *BSD — /usr/local..., а в разных Linux-ах по разному, но велика вероятность, что конфиги лягут в /etc/sphinx, а бинарники в /usr/local/bin). Для простоты дальнейшего повествования, предположим, что конфиги у вас будут лежать в каталоге /usr/local/sphinx/etc, а бинарники в /usr/local/sphinx/bin.
На этом этап установки завершен.
2 Настройка
Для начала стоит сказать, что конфигурация поисковой машины Сфинкс оперирует двумя фундаментальными параметрами:
* Источник (source) — описание объектов индексируемых данных, параметры доступа к ним и указание поисковой машине аттрибутов данных, их типов и правил их анализа.
* Индекс (index) — хранилище индекса данных, описанных в источнике (да, тавтология :) ). В качестве данных, хранимых в индексе, указывается ранее описанный источник.
Исходя из написанного выше, для настройки Сфинкса на индексацию базы данных Живой Улицы, нам необходимо описать источники и индексы. В данном топике будет приведен пример конфигурационного файла с индексами комментариев и топиков. Расширенную настройку каждый сможет провести самостоятельно, в зависимости от требований проекта.
Со сфинксом поставляется конфигурационный файл по-умолчанию, однако он нам не пригодиться. При первичной настройке Вы можете воспользоваться моим, который приведен ниже. Однако учтите, что в нем необходимо прописать параметры доступа к базе данных и пути до каталогов, в которых будут храниться индексы.
Настройка автозапуска поискового демона при старте системы
Для осуществления того, что написано в заголовке раздела, необходимо в один из стартовых скриптов системы, например, /etc/rc.local для ОС Linux вставить код:
# Запускаем демона Сфинкс
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
Настройка периодической индексации базы данных
Самый простой способ запустить индексацию — это выполнить или добавить в планировщик команду
/usr/local/sphinx/bin/indexer --all, однако данный способ является сильно неоптимальным, поскольку топики обновляются (точнее появляются новые) значительно реже, нежели комментарии, поэтому частоту обновления индекса комментариев должны быть больше.Для различной частоты индексации объектов разного типа, в планировщик необходимо добавить следующие инстукции:
12 */3 * * * /usr/local/sphinx/bin/indexer --rotate topicsIndex > /dev/null 2>&1
*/50 * * * * /usr/local/sphinx/bin/indexer --rotate commentsIndex > /dev/null 2>&1(означает индексацию топиков каждые 3 часа с запуском процесса на 12ой минуте часа и индексацию комментариев каждые 50 минут)
3 Пример конфигурационного файла
## Конфигурационный файл Sphinx-а для индексации Живой улицы
#######################
#
# Описываем индексы
#
#######################
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
type = mysql
sql_host = your_database_host
sql_user = your_database_login
sql_pass = your_database_password
sql_db = your_database_name
sql_port = 3306
# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
# операции с БД происходили не через TCP/IP стек сервера)
sql_sock = /var/run/mysqld/mysqld.sock
mysql_connect_flags = 32 # 32- включение сжатие при обмене данными с БД
# Включам нужную кодировку соединения и выключаем кеш запросов
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
}
# Источник топиков
source topicsSource : lsParentSource
{
# запрос на получения данных топиков
sql_query = \
SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
tc.topic_text, t_fast.topic_publish \
FROM prefix_topic as t_fast, prefix_topic_content AS tc \
WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end
# запрос для дробления получения топиков на неколько итераций
sql_query_range = SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
# сколько получать объектов за итерацию
sql_range_step = 1000
# Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
sql_attr_bool = topic_publish
# Атрибут даты добавления, типа "время"
sql_attr_timestamp = topic_date_add
# мульти-аттрибут "теги топика"
sql_attr_multi = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
sql_ranged_throttle = 0
}
# Источник комментариев
source commentsSource : lsParentSource
{
sql_query = \
SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
FROM prefix_topic_comment \
WHERE comment_id>=$start AND comment_id<=$end
sql_query_range = SELECT MIN(comment_id),MAX(comment_id) FROM prefix_topic_comment
sql_range_step = 5000
sql_attr_bool = comment_delete
sql_attr_timestamp = comment_date
}
#######################
#
# Описываем индексы
#
#######################
index topicsIndex
{
# Источник, который будет хранить данный индекса
source = topicsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
# Тип хранения аттрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru, soundex, metaphone
# Кодировака данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
}
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
docinfo = extern
mlock = 0
morphology = stem_enru, soundex, metaphone
charset_type = utf-8
}
#######################
#
# Настройки индексатора
#
#######################
indexer
{
# Лимит памяти, который может использавать демон-индексатор
mem_limit = 32M
}
#######################
#
# Настройка демона-поисковика
#
#######################
searchd
{
# Адрес, на котором будет прослушиваться порт
address = 127.0.0.1
# Ну и собственно номер порта демона searchd
port = 3312
# Лог-файл демона
log = /var/log/sphinx/searchd.log
# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
query_log = /var/log/sphinx/query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = /var/log/sphinx/searchd.pid
}
- +20
- 09 ноября 2008, 19:30
- kruft
а сколько примерно строится индекс, скажем для 1000 топиков
есть какая-нибуть статистика применимо к лайвстриту?
есть какая-нибуть статистика применимо к лайвстриту?
ну когда я тестировал свой модуль (который еще не до конца готов) — 6200 топиков+27000 комментариев. размер базы в бинарном виде около 150мб, сфинкс полностью обходил описанные источники за 27 секунд — порядка 10 секунд на все топики и около 17-18 на комментарии (видимо из-за большого их количества — количество запросов получается больше, записей в индексный файл больше и тп).
это я делал на старом сервере, недавно сильно обновил сервер (память в 4 раза увеличил) и проц сильно шустрее.
Результаты:
server:~# indexer --rotate topicsIndex
Sphinx 0.9.8-release (r1371)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'topicsIndex'...
collected 4951 docs, 20.4 MB
collected 3165 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 1.6 Mhits, 100.0% done
total 4951 docs, 20369103 bytes
total 14.478 sec, 1406895.17 bytes/sec, 341.97 docs/sec
rotating indices: succesfully sent SIGHUP to searchd (pid=3446).
server:~# indexer --rotate commentsIndex
Sphinx 0.9.8-release (r1371)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'commentsIndex'...
collected 27546 docs, 6.1 MB
sorted 0.6 Mhits, 100.0% done
total 27546 docs, 6115398 bytes
total 4.352 sec, 1405054.70 bytes/sec, 6328.88 docs/sec
rotating indices: succesfully sent SIGHUP to searchd (pid=3446).
опция rotate указана для того, чтобы после переиндексации индексер послал поисковому демону сигнал на релоад индесных файлов.
Тут надо учитывать, что у меня (как и по-умолчанию) включена полная переиндексация каждый раз. Если настраивать дельта-индексы (только добавленные в базу записи), то будет знаааачительно быстрее.
Вопрос, что такое индексные файлы, и с чем их едят?
WARNING: index 'topicsIndex': preload: /home/webmaster/sphinx/index.sph is invalid header file (too old index version?); NOT SERVING
WARNING: index 'commentsIndex': preload: /home/webmaster/sphinx/index.sph is invalid header file (too old index version?); NOT SERVING
FATAL: no valid indexes to serve
можно немного по подробнее о:
# Источник, который будет хранить данный индекса
source = topicsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
и
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
эти каталоги нужно вручную создать? и если да, то в папке с сайтом или више сайта?
# Источник, который будет хранить данный индекса
source = topicsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
и
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
эти каталоги нужно вручную создать? и если да, то в папке с сайтом или више сайта?
Самый простой способ запустить индексацию — это выполнить или добавить в планировщик команду
/usr/local/sphinx/bin/indexer --all
как автоматизировать в windows данный процесс?
сам не использовал, но пишут что nnCron (виндовая программа) — достаточно мощный планировщик, в него можно и засунуть вызов индексатора.
только в случае, если в момент индексации поисковый демон работает необходимо стартовать индексатор с параметром --rotate (чтобы индексер уведомил демона об обновлении индексов)
Также, запуск переиндексации всех индексов не оптимален, лучше запускать индексацию комментариев и постов в разное время с различными временными интервалами
только в случае, если в момент индексации поисковый демон работает необходимо стартовать индексатор с параметром --rotate (чтобы индексер уведомил демона об обновлении индексов)
Также, запуск переиндексации всех индексов не оптимален, лучше запускать индексацию комментариев и постов в разное время с различными временными интервалами
в принципе разобралась как установить и таки установила! осталась 1 проблема.
1. при поступлении нового контента его сразу не индексирует, т.е. как в windows автоматизировать данный процесс. X:\sphinx\bin\indexer.exe --all
2. для windows индексации мало, нужен еще перезапуск поискового демона X:\sphinx\bin\searchd.exe
т.е. тоже не понятно как автоматизировать этот момент
3. если отключить поисковый демон и кто-то из посетителя в поиске начнёт что-то искать, сайт мягко говоря падает :)
1. при поступлении нового контента его сразу не индексирует, т.е. как в windows автоматизировать данный процесс. X:\sphinx\bin\indexer.exe --all
2. для windows индексации мало, нужен еще перезапуск поискового демона X:\sphinx\bin\searchd.exe
т.е. тоже не понятно как автоматизировать этот момент
3. если отключить поисковый демон и кто-то из посетителя в поиске начнёт что-то искать, сайт мягко говоря падает :)
Да, не индексирует. searchd ничего не знает о контенте, базе данных и тп, он работает только с предварительно созданными индексными файлами. indexer может уведомить searchd (по крайней мере в *nix системах точно может посылкой сигнала SIGHUP процессу searchd) о том, что файлы индексов необходимо перепрочитать (такой функционал включается запуском indexer-а с параметром --rotate)
Падать ничего не должно, должно выдаваться сообщение о технической ошибке.
Падать ничего не должно, должно выдаваться сообщение о технической ошибке.
15:22
using config file './sphinx.conf'…
WARNING: key 'address' is deprecated in ./sphinx.conf line 140; use 'listen' ins
tead.
WARNING: key 'port' is deprecated in ./sphinx.conf line 144; use 'listen' instea
d.
indexing index 'topicsIndex'…
collected 12 docs, 0.0 MB
collected 14 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 12 docs, 1637 bytes
total 0.095 sec, 17222.10 bytes/sec, 126.25 docs/sec
indexing index 'commentsIndex'…
collected 16 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 16 docs, 245 bytes
total 0.057 sec, 4300.16 bytes/sec, 280.83 docs/sec
total 8 reads, 0.0 sec, 12.0 kb/read avg, 0.0 msec/read avg
total 16 writes, 0.0 sec, 0.3 kb/write avg, 0.2 msec/write avg
WARNING: failed to scanf pid from pid_file 'x:\sphinx\log\searchd.pid'.
WARNING: indices NOT rotated.
using config file './sphinx.conf'…
WARNING: key 'address' is deprecated in ./sphinx.conf line 140; use 'listen' ins
tead.
WARNING: key 'port' is deprecated in ./sphinx.conf line 144; use 'listen' instea
d.
indexing index 'topicsIndex'…
collected 12 docs, 0.0 MB
collected 14 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 12 docs, 1637 bytes
total 0.095 sec, 17222.10 bytes/sec, 126.25 docs/sec
indexing index 'commentsIndex'…
collected 16 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 16 docs, 245 bytes
total 0.057 sec, 4300.16 bytes/sec, 280.83 docs/sec
total 8 reads, 0.0 sec, 12.0 kb/read avg, 0.0 msec/read avg
total 16 writes, 0.0 sec, 0.3 kb/write avg, 0.2 msec/write avg
WARNING: failed to scanf pid from pid_file 'x:\sphinx\log\searchd.pid'.
WARNING: indices NOT rotated.
searchd
{
# Адрес, на котором будет прослушиваться порт
address = 127.0.0.1
# Ну и собственно номер порта демона searchd
port = 3312
# Лог-файл демона
log = x:\sphinx\log\searchd.log
# Лог поисковых запросов. Если закомментировать, то логировать поисковые строки не будет
query_log = x:\sphinx\log\query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = x:\sphinx\log\searchd.pid
}
файл никакие не создались для ведения логов
{
# Адрес, на котором будет прослушиваться порт
address = 127.0.0.1
# Ну и собственно номер порта демона searchd
port = 3312
# Лог-файл демона
log = x:\sphinx\log\searchd.log
# Лог поисковых запросов. Если закомментировать, то логировать поисковые строки не будет
query_log = x:\sphinx\log\query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = x:\sphinx\log\searchd.pid
}
файл никакие не создались для ведения логов
Пытаюсь установить сфинкс, что то выдает ошибку, линуксоиды помогите пожалуйста чего не хватает? /cmslive.ru/sphinx-0.9.8.1/src/sphinx.h:617: undefined reference to `sphCreateSBCSTokenizer()'
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
такие ошибки появляются, когда линкер при линковсе отдельных объектных файлов не подцепляет какойто объект. в котором экспортируется функция, на которую ругается
Немного повозившись с ./configure эта ошибка исчезла, появилось другое: g++ -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -o indexer indexer.o libsphinx.a -L/usr/local/mysql/lib -lmysqlclient -lz -lm -liconv -lexpat -L/usr/local/lib
/usr/bin/ld: cannot find -lmysqlclient
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
Люди помогите побороть вот это: cannot find -lmysqlclient Я так понял этой библиотеки нету, подскажите как ее поставить или может нужно установить libmysql-dev?
/usr/bin/ld: cannot find -lmysqlclient
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
Люди помогите побороть вот это: cannot find -lmysqlclient Я так понял этой библиотеки нету, подскажите как ее поставить или может нужно установить libmysql-dev?
Установил, у меня бинарники в:
/usr/local/bin/indexer
/usr/local/bin/searchd
/usr/local/bin/search
/usr/local/bin/spelldump
Конфиги в: /usr/local/etc/sphinx.conf
/usr/local/etc/example.sql
Теперь никак не найду /etc/rc.local, похоже у меня его нет. Подскажите пожалуйста в какой еще стартовый файл можно прописать /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
ладно уже решил.
Теперь другая проблема
using config file '/usr/local/etc/sphinx.conf'…
indexing index 'topicsIndex'…
collected 161 docs, 0.3 MB
collected 328 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 161 docs, 274023 bytes
total 0.202 sec, 1355770.96 bytes/sec, 796.57 docs/sec
indexing index 'commentsIndex'…
collected 271 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 271 docs, 37276 bytes
total 0.041 sec, 918852.26 bytes/sec, 6680.14 docs/sec
[root@yanga etc]#
И не чего не ищет католог с индексами пустой(
Теперь другая проблема
using config file '/usr/local/etc/sphinx.conf'…
indexing index 'topicsIndex'…
collected 161 docs, 0.3 MB
collected 328 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 161 docs, 274023 bytes
total 0.202 sec, 1355770.96 bytes/sec, 796.57 docs/sec
indexing index 'commentsIndex'…
collected 271 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 271 docs, 37276 bytes
total 0.041 sec, 918852.26 bytes/sec, 6680.14 docs/sec
[root@yanga etc]#
И не чего не ищет католог с индексами пустой(
Люди как проверить работает ли поиск? Вроде все установил, но ничего не ищет, пишет «Удивительно, но поиск не дал результатов». В конфиге прописал
# Источник, который будет хранить данный индекса
source = topicsSource
path = home/index
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /home/index
Каталог index вручную просто создал в папке home, но он пустой, что в нем должно быть?
# Источник, который будет хранить данный индекса
source = topicsSource
path = home/index
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /home/index
Каталог index вручную просто создал в папке home, но он пустой, что в нем должно быть?
Папку index через ftp просматриваешь?
у меня он тоже пустой) глянь на него через mc по ssh подключившись)
И демон запущен, а то может ты как и я забыл про него).
у меня он тоже пустой) глянь на него через mc по ssh подключившись)
И демон запущен, а то может ты как и я забыл про него).
Просматриваю через mc подключившись через ssh, в папке выше index появились файлы index.spa, index.spd, index.sph...*spi,*spl, *spm, *spp. Выполняю usr/local/bin/indexer --all отвечает FATAL: failed to lock pid file '/var/log/searchd.pid': Resource temporarily unavailable (searchd already running?) У меня не было файла /etc/rc.local, я сам его создал и записал в него /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf Потом перезагрузил сервер… Пес его знает работает демон или нет, в linux я слабовато разбираюсь, как еще можно запустить демон кроме записи в rc.local и как проверить запущен ли он?
www# /configure; make; make install
/configure: Command not found.
Making all in src
if test -d ../.svn; then svn info .. --xml | perl svnxrev.pl; fi;
make all-am
Making all in test
Making install in src
if test -d ../.svn; then svn info .. --xml | perl svnxrev.pl; fi;
make install-am
test -z "/usr/local/bin" || /home/loragt/data/sphinx-0.9.8.1/config/install-sh -d "/usr/local/bin"
/usr/bin/install -c 'indexer' '/usr/local/bin/indexer'
/usr/bin/install -c 'searchd' '/usr/local/bin/searchd'
/usr/bin/install -c 'search' '/usr/local/bin/search'
/usr/bin/install -c 'spelldump' '/usr/local/bin/spelldump'
Making install in test
test -z "/usr/local/etc" || /home/loragt/data/sphinx-0.9.8.1/config/install-sh -d "/usr/local/etc"
/usr/bin/install -c -m 644 'sphinx.conf.dist' '/usr/local/etc/sphinx.conf.dist'
/usr/bin/install -c -m 644 'sphinx-min.conf.dist' '/usr/local/etc/sphinx-min.conf.dist'
/usr/bin/install -c -m 644 'example.sql' '/usr/local/etc/example.sql'
make install-data-hook
mkdir -p /usr/local/var/data && mkdir -p /usr/local/var/log
www#
что дальше?
При расположении результата поиска на странице ничего не выдается. Ошибка 404. Подскажите пожалуйста — как верно настроить поиск?
help
все сделал по мануалу…
индексы топиков и коментов создаются в разных папках в виде .new.spa и т.д
Но поиск не работает. Пробую запустить демон руками
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
в ответ получаю
using config file '/usr/local/etc/sphinx.conf'...
creating server socket on 127.0.0.1:3312
WARNING: index 'topicsIndex': preload: failed to open /var/sphinx/topics/.sph: No such file or directory; NOT SERVING
WARNING: index 'commentsIndex': preload: failed to open /var/sphinx/comments/.sph: No such file or directory; NOT SERVING
FATAL: no valid indexes to serve
Куда копать?
указать в конфиге пути для сохранения индексов, куда юзер от которого производится запуск индексе имеет право на запись.
ну и ессно сначала требуется провести индексацию indexer-ом, иначе searchd не запустится, т.к. файлов еще не будет…
ну и ессно сначала требуется провести индексацию indexer-ом, иначе searchd не запустится, т.к. файлов еще не будет…
В общем разобрался как на linux все это ставится.
— для индексов топиков и комментов сделал разные папки, какие и прописываем в sphinx.conf
— затем запускаем indexer --all
— затем планируем crontab
— затем прописываем демон в автозагрузку rc.local
— и только затем запускаем демон или ресетим сервер для загрузки демона с rc.local
Именно такая последовательность привела к положительному результату.
— для индексов топиков и комментов сделал разные папки, какие и прописываем в sphinx.conf
— затем запускаем indexer --all
— затем планируем crontab
— затем прописываем демон в автозагрузку rc.local
— и только затем запускаем демон или ресетим сервер для загрузки демона с rc.local
Именно такая последовательность привела к положительному результату.
а у меня
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
creating server socket on 127.0.0.1:3312
WARNING: index 'topicsIndex': preload: /srv/www/htdocs/index/top.sph is invalid header file (too old index version?); NOT SERVING
WARNING: index 'commentsIndex': preload: /srv/www/htdocs/index/com.sph is invalid header file (too old index version?); NOT SERVING
FATAL: no valid indexes to serve
подскажите в чем беда?
Получаю ошибку и никак не могу понять в чем дело?
на
/usr/local/sphinx/bin/indexer --all
получаю:
Sphinx 0.9.8.1-release (r1533)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'topicsIndex'...
collected 60 docs, 0.3 MB
collected 24 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
ERROR: index 'topicsIndex': failed to create /srv/www/htdocs/index/top.sph: Is a directory.
total 60 docs, 271819 bytes
total 0.140 sec, 1940095.46 bytes/sec, 428.25 docs/sec
indexing index 'commentsIndex'...
collected 61 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
ERROR: index 'commentsIndex': failed to create /srv/www/htdocs/index/com.sph: Is a directory.
total 61 docs, 4054 bytes
total 0.010 sec, 405400.01 bytes/sec, 6100.00 docs/sec
animalgrad:/srv/www/htdocs/sphinx #
Сообщениям об ошибках в опенсорсных-посикс приложениях надо верить (не то что вендузятские :)).
Тебе же на чистом английском написали:
ERROR: index 'topicsIndex': failed to create /srv/www/htdocs/index/top.sph: Is a directory.
top.sph — это директория.
Покажи кусок конфига, где прописаны пути сохранения индексов на диск.
Тебе же на чистом английском написали:
ERROR: index 'topicsIndex': failed to create /srv/www/htdocs/index/top.sph: Is a directory.
top.sph — это директория.
Покажи кусок конфига, где прописаны пути сохранения индексов на диск.
Спасибо, все заработало, просто надо было запускать мускул не как на Бздях, а как на линухах, а это принципиально, но все в прорядке, все работает…
Что хотел заметить, что с таким конфигом в результаты поиска попадают и закрытые топики/черновики.
И еще, не подскажите, в чем может быть проблема. С LS 1.2 мигрировал на версию из SVN. Сфинкс индексные файлы создает, вроде бы все ок. Конфиг взял kruft'а, но штука в том, что корректно ищет только по комментарием, в выдаче топиков совершенно не те топики, что нужно выводятся. Как можно попытатся отладить данную проблему?
И еще, не подскажите, в чем может быть проблема. С LS 1.2 мигрировал на версию из SVN. Сфинкс индексные файлы создает, вроде бы все ок. Конфиг взял kruft'а, но штука в том, что корректно ищет только по комментарием, в выдаче топиков совершенно не те топики, что нужно выводятся. Как можно попытатся отладить данную проблему?
Спасибо за статью, установил sphinx без особых проблем. Вот только не получается добавить источник — пользователи (people) для организации поиска по полям профиля пользователей.
конфиг:
конфиг:
<code>
# Источник пользователей
source peoplesSource : lsParentSource
{
sql_query = \
SELECT user_id, user_login, UNIX_TIMESTAMP(user_date_register) as user_date_register \
FROM prefix_user \
WHERE user_date_register>=$start AND user_date_last<=$end
sql_query_range = SELECT MIN(user_id),MAX(user_id) FROM prefix_user
sql_range_step = 5000
}
индекс пользователей
index peoplesIndex
{
# Источник, который будет хранить данный индекса
source = peoplesSource
path = /var/index/peoples/
# Тип хранения аттрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru, soundex, metaphone
# Кодировака данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
}
</code>
sql_query и sql_query_range друг другу противоречат.
во втором запросе получаются минимальное и максимальное значения атрибута, по которому будет разбиваться процесс индексации по шагам, а потом начинает выполняться 1ый запрос с подстановкой переменных start и end через заданный 3им свойством шаг.
Смотримс что согласно твоему конфигу получается:
1. получили минимальное и максимальное значение юзер_ид.
2. начали выполнять запрос
потом переменные инкрементируются на значение шага (5000) и запрос выполняется снова. и тд до максимального значения юзер_ид.
Гениальная мысль: почему это указана разбивка по юзер_ид (что вообщем-то логично), но значения айдишников подставляются для сравнения с датой регистрации юзера в формате временной метки юникс (количество секунд, прошедшее с 1.01.1970г — число на данный момент сильно большое).
Логично предположить, что юзеров с регистрацией 1...5000...10000… сек на сайте, созданном в 2009 году быть не может :-), следовательно, 1ый запрос выдает 0 рядов результата. Отрабатывая при этом совершенно верно, как написано :-)
Резюме: в 1м запросе необходимо указать условие по user_id. Как переписать запрос для этого, я думаю, подсказывать нет необходимости =)
Гениальная догадка:
во втором запросе получаются минимальное и максимальное значения атрибута, по которому будет разбиваться процесс индексации по шагам, а потом начинает выполняться 1ый запрос с подстановкой переменных start и end через заданный 3им свойством шаг.
Смотримс что согласно твоему конфигу получается:
1. получили минимальное и максимальное значение юзер_ид.
2. начали выполнять запрос
<code>SELECT user_id, user_login, UNIX_TIMESTAMP(user_date_register) as user_date_register \
FROM prefix_user \
WHERE user_date_register>=МИНИМУМ_ИЗ_ПЕРВОГО_ПУНКТА AND user_date_last<=МИНИМУМ+ШАГ(5000)</code>.потом переменные инкрементируются на значение шага (5000) и запрос выполняется снова. и тд до максимального значения юзер_ид.
Гениальная мысль: почему это указана разбивка по юзер_ид (что вообщем-то логично), но значения айдишников подставляются для сравнения с датой регистрации юзера в формате временной метки юникс (количество секунд, прошедшее с 1.01.1970г — число на данный момент сильно большое).
Логично предположить, что юзеров с регистрацией 1...5000...10000… сек на сайте, созданном в 2009 году быть не может :-), следовательно, 1ый запрос выдает 0 рядов результата. Отрабатывая при этом совершенно верно, как написано :-)
Резюме: в 1м запросе необходимо указать условие по user_id. Как переписать запрос для этого, я думаю, подсказывать нет необходимости =)
Гениальная догадка:
Попробовал поиграться с конфигом, пока без результатов. Мне нужен поиск по полям профиля пользователя (имя, обо мне, местоположение, дата регистрации, интересы и т.д). Может кто подскажет куда копать.
Еще ведь нужно добавить закладку сюда:
Еще ведь нужно добавить закладку сюда:
я думал, что в первом своем ответе расписал максимально подробно чего не так и что нужно сделать :-)
в твоем текущем конфиге надо всего-лишь написать первый запрос с условием WHERE user_id>=$start AND user_id<=$end вместо того, что сейчас написано.
ЗЫ: еще раз перечитал свой ответ предыдущий — всетаки то, что написано выше является единственным его следствием :-) Разве нет?
в твоем текущем конфиге надо всего-лишь написать первый запрос с условием WHERE user_id>=$start AND user_id<=$end вместо того, что сейчас написано.
ЗЫ: еще раз перечитал свой ответ предыдущий — всетаки то, что написано выше является единственным его следствием :-) Разве нет?
Народ а как сабж можно собрать самому?
Сегодня от хостера получил такой вот ответ
ЗЫ: сменить хостера не предлагать :)
Сегодня от хостера получил такой вот ответ
Этого программного обеспечения нет в репозитариях Fedora Linux.
Вы можете собрать его в домашней директории пользователя.
ЗЫ: сменить хостера не предлагать :)
Китайский! Никто не может ли доступно для чайника задокументировать процесс установки этого сфинкса, по пунктам?! Или, может, есть где-то такая инфа уже, как найти? Или никто для чайников расписывать не будет и нужно найти знающего чела, кто поставит этого Сфинкса?

- AntonVolkov
- 24 мая 2009, 13:55
- ↓
Есть проблема при вхождении поискового запроса в параметры хтмл-тегов. Например, title изображений разрывается подсветкой и ещё начало тега обрезается, если параметре много текста.
Можно ли делать исключения, если обнаружено вхождение внутри тега и оборачивать спаном весь тег? И с обрезкой придумать что-то, чтобы теги помещались в результатах поиска целиком, а с ними — и их содержимое — картинки, встроенные плеерв и тд
Можно ли делать исключения, если обнаружено вхождение внутри тега и оборачивать спаном весь тег? И с обрезкой придумать что-то, чтобы теги помещались в результатах поиска целиком, а с ними — и их содержимое — картинки, встроенные плеерв и тд
Господа! Требуется помощь. Значится мне хороший товарищ помог установить и настроить sphinx'а на сервере: «индекс живой. Всё работает. Абсолютно.». И да, папка баз индекса полна, демон работает, казалось бы, НО…
Я не перестаю «удивляться, что поиск не дал рез-тов». Подскажите, пожалуйста, как диагностировать, куда копать?
Yuri25 о том же, а потом внезапно … и всё у него заработало. Но он не сказал, как поборол.
Как впринципе ЛС снюхивается со Сфинксом? Куда посмотреть, где рыть? Заранее премного благодарен!
Я не перестаю «удивляться, что поиск не дал рез-тов». Подскажите, пожалуйста, как диагностировать, куда копать?
Yuri25 о том же, а потом внезапно … и всё у него заработало. Но он не сказал, как поборол.
Как впринципе ЛС снюхивается со Сфинксом? Куда посмотреть, где рыть? Заранее премного благодарен!

- AntonVolkov
- 07 августа 2009, 12:50
- ↓
Товарищи. Объясните, пожалуйста, кто знает, логику работы морфологических движков, используемых Sphinx'ом. У меня на сайте установлен оный. Набираю запрос «е95», но получаю в результатах топики и с подсвеченными E55, и AH6. Как бы сделать так, чтобы почётче поиск работал? Т. е. склонения и падежи слов бы предлагались, а вот запросы с циферками выдавалибы однозначные рез-ты? Заранее спасибо!

- AntonVolkov
- 02 сентября 2009, 14:08
- ↓
Выручайте, хостинг на freebsd. Значит по моей просьбе хостёр установил сфинкса, вот пути:
/usr/local/bin/indexer
/usr/local/bin/search
/usr/local/sbin/searchd
Далее, в /usr/local/etc/sphinx.conf настроил как описано выше.
так как rc.local в папке etc нет, в freebsd запуск идёт через папку /usr/local/etc/rc.d/ в которой уже есть (возможно хостёр поставил) файл sphinxsearch, вот внутренности этого файла:
Может что-то в нём надо прописать?
/usr/local/bin/indexer
/usr/local/bin/search
/usr/local/sbin/searchd
Далее, в /usr/local/etc/sphinx.conf настроил как описано выше.
так как rc.local в папке etc нет, в freebsd запуск идёт через папку /usr/local/etc/rc.d/ в которой уже есть (возможно хостёр поставил) файл sphinxsearch, вот внутренности этого файла:
#!/bin/sh
#
# $FreeBSD: ports/textproc/sphinxsearch/files/sphinxsearch.sh.in,v 1.4 2008/04/27 08:50:49 miwi Exp $
#
# PROVIDE: sphinxsearch
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable sphinxsearch:
#
# sphinxsearch_enable="YES"
#
# Other rc.conf variables:
#
# sphinxsearch_conffile="/usr/local/etc/sphinx.conf"
# -- path to config file
# sphinxsearch_pidfile="/var/run/sphinxsearch/searchd.pid"
# -- location of pidfile: must match setting
# in ${sphinxsearch_conffile}
# sphinxsearch_user="_sphinx"
# -- user to run searchd as
# sphinxsearch_group="_sphinx"
# -- group to run searchd as
# sphinxsearch_logdir="/var/log/sphinxsearch"
# -- directory searchd writes logs to
#
. /etc/rc.subr
name=sphinxsearch
rcvar=`set_rcvar`
load_rc_config ${name}
: ${sphinxsearch_enable="NO"}
: ${sphinxsearch_conffile="/usr/local/etc/sphinx.conf"}
: ${sphinxsearch_pidfile="/var/run/sphinxsearch/searchd.pid"}
: ${sphinxsearch_user="_sphinx"}
: ${sphinxsearch_group="_sphinx"}
: ${sphinxsearch_logdir="/var/log/sphinxsearch"}
command=/usr/local/sbin/searchd
pidfile=${sphinxsearch_pidfile}
required_files=${sphinxsearch_conffile}
start_precmd=sphinxsearch_prestart
sphinxsearch_prestart ()
{
piddir=$(dirname ${sphinxsearch_pidfile})
if [ ! -d ${piddir} ]; then
mkdir -m 755 -p ${piddir}
chown -R ${sphinxsearch_user}:${sphinxsearch_group} ${piddir}
fi
if [ ! -d ${sphinxsearch_logdir} ]; then
mkdir -m 755 -p ${sphinxsearch_logdir}
chown -R ${sphinxsearch_user}:${sphinxsearch_group} \
${sphinxsearch_logdir}
fi
}
case "${sphinxsearch_flags}" in
*--config\ *)
echo "Warning \$sphinxsearch_flags includes --config option." \
"Please use \$sphinxsearch_conffile instead."
;;
*)
sphinxsearch_flags="--config ${sphinxsearch_conffile} ${sphinxsearch_flags}"
;;
esac
run_rc_command "$1"
Может что-то в нём надо прописать?
ну если есть инит-скрипт — это это вообще супер :)
Тогда надо просто в /usr/local/etc/rc.conf вставить строчку
и с этого момента будет автозапускаться СФинкс.
Тогда надо просто в /usr/local/etc/rc.conf вставить строчку
sphinxsearch_enable="YES"и с этого момента будет автозапускаться СФинкс.
Блин, в /usr/local/etc/ нет rc.conf?
тут вот написано (http://www.citforum.ru/operating_systems/freebsd/handbook/configtuning-starting-services.shtml)
а у меня уже получается sphinxsearch там есть, кстати в нём есть закомментированная такая строчка
тут вот написано (http://www.citforum.ru/operating_systems/freebsd/handbook/configtuning-starting-services.shtml)
Замечание: Не записывайте свои команды в /etc/rc.conf. Для запуска демонов, или для выполнения вашей команды во время запуска — запишите ваш скрипт в /usr/local/etc/rc.d.
а у меня уже получается sphinxsearch там есть, кстати в нём есть закомментированная такая строчка
sphinxsearch_enable=«YES», может раскомментировать?
А ступил, извиняюсь, файлик этот есть, он на следующей странице был, значит прописал в него
sphinxsearch_enable=«YES», перезагрузил сервер, не работает. В общем походу не осилить мне это дело самому, прошу помощи, кто возьмётся настроить sphinx'a на FreeBSD, если кто этим зарабатывает, сразу ценник скажите. Спасибо.
Народ, у меня вообще нет такого файла rc.conf (Debian 5). После перезагрузки сервера не работает сфинкс. При ручном запуске из cron выдает WARNING:
failed to open pid_file '/var/log/sphinx/searchd.pid'.
WARNING: indices NOT rotated.
После ручного запуска с консоли /usr/local/bin/searchd — все начинает нормально индексироваться.
Подскажите пожалуйста куда прописать для автозапуска, чтобы после перезагрузок работало. Спасибо.
failed to open pid_file '/var/log/sphinx/searchd.pid'.
WARNING: indices NOT rotated.
После ручного запуска с консоли /usr/local/bin/searchd — все начинает нормально индексироваться.
Подскажите пожалуйста куда прописать для автозапуска, чтобы после перезагрузок работало. Спасибо.
При поиске выдает «Системная ошибка, повторите позже».
0. Прочитал все, что есть, однако, ответа не нашел.
1. Демон запущен, индексацию произвел.
2. Утилитка search находит результаты.
3. Вставил отладку в файл Sphinx.class.php. Результат возвращается.
Что-то не донастроил? Куда капнуть? =)
0. Прочитал все, что есть, однако, ответа не нашел.
1. Демон запущен, индексацию произвел.
2. Утилитка search находит результаты.
3. Вставил отладку в файл Sphinx.class.php. Результат возвращается.
Что-то не донастроил? Куда капнуть? =)
Решилась проблема переустановкой LS + поставил версию сфинкса 0.9.8.
Спасибо, kruft за помощь. Вместе нашли решение :)
Спасибо, kruft за помощь. Вместе нашли решение :)
Как решили проблему? Переустановка LS не вариант совсем.
Стоял сфинкс 0,9,8, все было норм. обновили до 0,9,9, перестал выдавать результаты и пишет — Системная ошибка, повторите позже.
В чем тут косяк может быть?
Стоял сфинкс 0,9,8, все было норм. обновили до 0,9,9, перестал выдавать результаты и пишет — Системная ошибка, повторите позже.
В чем тут косяк может быть?
Решил проблему следующим образом:
в Sphinx.class.php
меняем на
Короче говоря, в первом случае оба атрибута, topic_publish и comment_delete передаются при поиске в каждом индексе. Ессно, тот или иной атрибут существует только в определенном индексе. В 0.9.8 такое прокатывало, в 0.9.9 видимо ужесточили проверку. Я воткнул простую проверку и передаю только нужные атрибуты (не очень красиво, но главное понять в чем проблема)
в Sphinx.class.php
if(!is_null($aExtraFilters)){
foreach($aExtraFilters AS $sAttribName => $sAttribValue){
$this->oSphinx->SetFilter(
$sAttribName,
(is_array($sAttribValue)) ? $sAttribValue : array($sAttribValue)
);
}
меняем на
if(!is_null($aExtraFilters)){
foreach($aExtraFilters AS $sAttribName => $sAttribValue){
if($sObjType=="topic" and $sAttribName=="topic_publish"){
$this->oSphinx->SetFilter(
$sAttribName,
(is_array($sAttribValue)) ? $sAttribValue : array($sAttribValue)
);
}
elseif($sObjType=="comment" and $sAttribName=="comment_delete"){
$this->oSphinx->SetFilter(
$sAttribName,
(is_array($sAttribValue)) ? $sAttribValue : array($sAttribValue)
);
}
echo $this->oSphinx->GetLastError();
}
}
Короче говоря, в первом случае оба атрибута, topic_publish и comment_delete передаются при поиске в каждом индексе. Ессно, тот или иной атрибут существует только в определенном индексе. В 0.9.8 такое прокатывало, в 0.9.9 видимо ужесточили проверку. Я воткнул простую проверку и передаю только нужные атрибуты (не очень красиво, но главное понять в чем проблема)
багу в транке нашел —
из конфига модуля Серч:
— как я понимаю, и как написано в исходниках модуля, элемент с ключем entity_prefix также должен лежать в массиве $config['sphinx']
из конфига модуля Серч:
$config['entity_prefix'] = '';
$config['sphinx']['host'] = 'localhost';
$config['sphinx']['port'] = '3312';— как я понимаю, и как написано в исходниках модуля, элемент с ключем entity_prefix также должен лежать в массиве $config['sphinx']
Люди, кто знает как настроить свинкс для поиска на нескольких сайтах на одном IP. Обращался к Лоре и Крафту, но они к сожалению помочь не имеют возможности. Напишите пожалуйста, неужели никто не делал подобное?
ответил в личку, здесь скопирую:
да все просто — для этого даже есть функционал в дистрибе движка — в конфиге модуля Search установи для разных сайтов разные entity_prefix-ы и в конфиг Сфинкса добавь подобные с существующими сорсы и индексы.
типа source site1Topics и site2Topics. соответственно с префиксами site1 и site2. по-дефолту префикс пустой
Я правильно понял, что нужно в sphinx.conf помимо
нужно прописать для другого сайта другие настройки для доступа к другой базе данных.
Не понял что означает в первой строке
и здесь
Допустим я прописал в конфиге модуля search для первого сайта так:
Куда теперь прописать site1 в сорсы и индексы?
source lsParentSource
{
type = mysql
sql_host = your_database_host
sql_user = your_database_login
sql_pass = your_database_password
sql_db = your_database_name
sql_port = 3306
# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
# операции с БД происходили не через TCP/IP стек сервера)
sql_sock = /var/run/mysqld/mysqld.sock
mysql_connect_flags = 32 # 32- включение сжатие при обмене данными с БД
# Включам нужную кодировку соединения и выключаем кеш запросов
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
}
# Источник топиков
source topicsSource : lsParentSource
..................................
#######################
#
# Описываем индексы
#
#######################
index topicsIndex
.....
index usersIndex
.....
нужно прописать для другого сайта другие настройки для доступа к другой базе данных.
Не понял что означает в первой строке
source lsParentSourceи здесь
# Источник топиков
source topicsSource : lsParentSourceДопустим я прописал в конфиге модуля search для первого сайта так:
define('SEARCH_ENTITY_PREFIX','site1');Куда теперь прописать site1 в сорсы и индексы?
source…: ...2 означает, что… берет все настройки (наследует) перечисленные в ...2.
таким образом, для первого сайта например, надо указать в конфиге ЛС site1_, для второго site2_.
а в конфиге сфинкса сделать site1_parentSource и site2_parentSource для второго соответственно.
и потом все разделы индексов и сорсов сделать типа site1_topicsSource: site1_parentSource и site2_topicsSource: site1_parentSource для 1го и 2го сайтов. аналогично для всех разделов source и index
таким образом, для первого сайта например, надо указать в конфиге ЛС site1_, для второго site2_.
а в конфиге сфинкса сделать site1_parentSource и site2_parentSource для второго соответственно.
и потом все разделы индексов и сорсов сделать типа site1_topicsSource: site1_parentSource и site2_topicsSource: site1_parentSource для 1го и 2го сайтов. аналогично для всех разделов source и index
господа! Какую версию сфинкса ставить для 0.4.2, 2.0.1-beta (Apr 2011) или 0.9.9-release (Dec 2009)?
У меня проблема такая: При выполнении indexer --all пишет:
FATAL: no indexes found in config file './sphinx.conf'
Т.е. он конфиг читает но не находит индексов. Вот код конфига:
FATAL: no indexes found in config file './sphinx.conf'
Т.е. он конфиг читает но не находит индексов. Вот код конфига:
source testing-index
{
type = mysql
sql_host = localhost
sql_user = user
sql_pass = 123
sql_db = search_test
sql_port = 3306
# main document fetch query
# mandatory, integer document ID field MUST be the first selected column
sql_query = SELECT id, header_ru, text_ru FROM category
sql_attr_uint = header_ru
sql_attr_uint = text_ru
# document info query, ONLY for CLI search (ie. testing and debugging)
# optional, default is empty
# must contain $id macro and must fetch the document by that id
sql_query_info = SELECT * FROM category WHERE id=$id
}
index testing-index
{
# document source(s) to index
# multi-value, mandatory
# document IDs must be globally unique across all sources
source = testing-index
# index files path and file name, without extension
# mandatory, path must be writable, extensions will be auto-appended
path = d:/webservers/home/sphinx/index
# document attribute values (docinfo) storage mode
# optional, default is 'extern'
# known values are 'none', 'extern' and 'inline'
docinfo = extern
# memory locking for cached data (.spa and .spi), to prevent swapping
# optional, default is 0 (do not mlock)
# requires searchd to be run from root
mlock = 0
# morphology = stem_en, stem_ru, soundex
morphology = stem_en
# minimum indexed word length
# default is 1 (index everything)
min_word_len = 1
charset_type = utf-8
html_strip = 1
stopwords = d:\webservers\home\sphinx\stop_words.txt
}
Комментарии (194)
RSS свернуть / развернуть