sphinxsearch выдает ошибку client version is higher than daemon version

mstdmstd

Новичок
Всем привет,
Пытаюсь на своей Kubuntu 14 в пхп приложении запустить sphinxsearch и по инсталляции при запуске получил ошибку :
Код:
searchd error: client version is higher than daemon version (client is v.1.29, daemon is v.1.25) in.../application/models/mcms_item.php
Установленный в системе демон более старый чем мой клиент?

При этом
Код:
$ searchd --help
Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
В проекте подключен sphinxclient.php с заголовком:
Код:
Код: [Выделить]
<?php
//
// $Id: sphinxapi.php 3802 2013-04-10 12:49:42Z tomat $
//
других указаний на то какая это версия я не нашел.

Я порылся гуглом и нашело советы типа:
Цитировать
Код:
Try uninstalling the default version of Sphinx, and using the latest Ubuntu/Debian package fromhttp://sphinxsearch.com/downloads/release/ in order to
take advantage of the latest version of the server.
Make filesystem and mysql backup before uninstalling. When you don't specify --purge during apt-get remove, good packages ask if they
should keep the data, but I wouldn't rely on this.
Мне нужно удалить свой пакетный searchd но какой версии тогда ставить чтобы он соответсвовал v.1.29?
Или файл с клиентом поискать? Но в этих файлах непонятно как указано версия( например тут https://github.com/gigablah/sphinxphp/blob/master/src/Sphinx/SphinxClient.php ).
 

mstdmstd

Новичок
Спасибо за ссылку
Порывшись в гугле я нашел что мне нужно открыть файл /etc/apt/sources.list
И в нем добавить 2 строки
Код:
deb http://ppa.launchpad.net/builds/sphinxsearch-rel22/ubuntu trusty main
deb-src http://ppa.launchpad.net/builds/sphinxsearch-rel22/ubuntu trusty main
И затем выполнить апдейт системы? Саму программу устанавливать не надо - а апдейт установит нужную мне вурсию .
Так? Этои манипуляции безопасны?
 

AnrDaemon

Продвинутый новичок
Не надо редактировать sources.list !!!!!!!!!!!!!!!
Прямо на ссылке есть инструкции как добавить PPA в систему.

add-apt-repository ppa:builds/sphinxsearch-rel22
 

mstdmstd

Новичок
Да я так и решил
Я выполнил эти команды и эта ошибка ушла. Но после того как я убрал ряд ошибок из файла конфигурации
то выполняю без ошибок, но с варнингами:

Код:
# su sphinxsearch -c 'indexer --all'
Sphinx 2.2.4-id64-release (r4806)
Copyright (c) 2001-2014, Andrew Aksyonoff
Copyright (c) 2008-2014, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'tour_description'...
WARNING: index 'tour_description': dict=keywords and prefixes and morphology enabled, forcing index_exact_words=1
WARNING: attribute 'id' not found - IGNORING
WARNING: Attribute count is 0: switching to none docinfo
collected 39 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 39 docs, 46 bytes
total 0.009 sec, 5052 bytes/sec, 4283.83 docs/sec
total 3 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
Не очень понятные варнинги особенно этот
Код:
WARNING: attribute 'id' not found - IGNORING
Но вроде это не критично?


Но дальше выскакивает ошибка :

Код:
Fatal error: Uncaught exception 'Exception' with message 'connection to localhost:3312 failed (errno=111, msg=Connection refused)' in /mnt/diskD_Work/wwwroot/ci22/application/models/mcms_item.php on line 68
Не очень понятно откуда в ошибке
Код:
localhost:3312
параметрв подключения описаны в /etc/sphinxsearch/sphinx.conf как :
Код:
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 1
sql_port = 3306
sql_db = ci22
 

AnrDaemon

Продвинутый новичок
По самому сфинксу не помогу. А 3312 это видимо порт самого сфинкса, а не MySQL.
 

mstdmstd

Новичок
В моем /etc/sphinxsearch/sphinx.conf есть строка
Код:
searchd
{
# Адрес, на котором будет прослушиваться порт
listen = 3312
Так заработало!
 

mstdmstd

Новичок
Я разбираясь по доке http://livestreet.ru/blog/14191.html
Там в файле конфигурации задается условие поиска $start и $end
Код:
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
Непонятно как передать именованные переменные
Я делаю:

Код:
$this->load->library("sphinxclient");
$NoLimits= false;
$SearchType= 'tour_description';

$s = new SphinxClient();
$s->SetServer($this->config->item('sphinx')['host'], $this->config->item('sphinx')['port']);
$s->SetLimits(0,30);
$s->SetMatchMode(SPH_MATCH_BOOLEAN);
$s->SetRankingMode(SPH_RANK_SPH04);
$s->SetSortMode(SPH_SORT_RELEVANCE);

$sd = [];

$searchStr= 'tour';
echo '<pre>$searchStr::'.print_r($searchStr,true).'</pre>';
if(mb_strlen($searchStr) < 3 && $NoLimits == false) {
throw new Exception("Search text too small!");
}

$ret = $s->Query($searchStr, $SearchType); // Это пареметры строка поиска и имя индекса поиска
echo '<pre>$ret::'.print_r($ret,true).'</pre>';

И получаю вывод :

$searchStr::tour

$ret::Array
(
[error] =>
[warning] =>
[status] => 0
[fields] => Array
(
[0] => description
)

[attrs] => Array
(
)

[total] => 0
[total_found] => 0
[time] => 0.000
[words] => Array
(
[tour*] => Array
(
[docs] => 0
[hits] => 0
)

[=tour] => Array
(
[docs] => 0
[hits] => 0
)

[tour] => Array
(
[docs] => 0
[hits] => 0
)

)

)
В моем /etc/sphinxsearch/sphinx.conf прописано :
Код:
source lsParentSource
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 1
sql_port = 3306
sql_db = ci22
sql_sock = /var/run/mysqld/mysqld.sock
mysql_connect_flags = 32 # 32- включение сжатие при обмене данными с БД

sql_query_pre = SET CHARACTER_SET_RESULTS=utf8
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF

}


source src_tour_description : lsParentSource {
sql_query = SELECT id, `description` FROM `bp_tour` where `description` like '%$text%' ORDER BY `description` ASC
sql_attr_uint = id # Непонятно назначение этого параметра
}

index tour_description {
min_word_len = 1
min_prefix_len = 3
docinfo = extern
html_strip = 1
source = src_tour_description
path = /_wwwroot/ci22/sphinx/tour_description
morphology = stem_enru
expand_keywords = 1
}
Если в базе выполнить запрос
Код:
SELECT id, `description` FROM `bp_tour` where `description` like '%tour%' ORDER BY `description` ASC
то возвращены 4 строки
А как правильно?
 

fixxxer

К.О.
Партнер клуба
Это устаревший способ работы со сфинксом, им пользовались, когда он еще не умел mysql-протокол.
Сейчас он прекрасно умеет (listen ..:mysql41), и можно с ним работать через mysqli, PDO или какой-нибудь DBAL, используя SphinxQL. Это намного удобнее.
 

mstdmstd

Новичок
Спасибо, интересно .
Я для своего Codeigniter 2 проекта нашел ссылку
https://github.com/andrew-s/codeigniter-sphinxrt
Там пример поиска выглядит так :
Код:
$result = $this->sphinxrt->search('example', array('search' => 'my query',
'limit' => 100,
'start' => 0,
'where' => array('is_active,=' => 1)));
Не совсем понятно а как приенить к моему случаю Я пытался с делать :
Код:
$result = $this->sphinxrt->search('id', array('search' => 'SELECT id, `description` FROM `bp_tour` ',
'limit' => 100,
'start' => 0,
'where' => array( 'description`,=' => '%tour%' )));
Но не получилось...

В sphinxsearch я передавал имя индекса поиска, а что передавать тут в качестве значений параметров
'example', 'my query И как передать параметр 'where' если у меня условие типа => array( 'description`,like' => '%tour%' ); ?
 
Сверху