[Пример] Sphinx и Drupal.

Аватар пользователя gagaga gagaga 9 мая 2009 в 1:50

Здравствуйте.
Попробую описать настройку Sphinx под Drupal. Подробнее о самом движке и его установке читайте на официальном сайте.
Для интеграции этого движка на данный момент существует два модуля, здесь я затрону описание только одного из них. Итак, Вам потребуются: Sphinx 0.9.9-rc2, модуль Sphinxsearch. Так же потребуется доступ к ssh, без него запуск индексатора и поискового демона будет невозможен!

Еще одна оговорка :). Я создала в /home/user папку sphinx, в которой находятся папки socket, index, log, config. Это необязательное действие и Вы можете хранить свои данные где хотите. Но дальнейшее описание будет строиться исходя из такого месторасположения и содержания файлов и папок.

Описание по шагам:

Шаг первый!

После того как Вы скачали модуль следует отредактировать файл sphinx.conf, который лежит в sphinxsearch\docs\contrib. Это файл конфигурации, в нем описываются все настройки индексатора и поиска и т.д. На самом деле количество доступных настроек в несколько раз превышает описанные в данном файле варианты. Наиболее полное описание можно взять в самом Сфинксе. Здесь мы рассмотрим только те настройки, которые требуются для запуска.

source source_main0
{
        type                                    = xmlpipe
        xmlpipe_command                 = /usr/bin/wget -O - -q -t 1 http://www.domain.com/sphinxsearch_scripts/sphinxsearch_xmlpipe.php?mode=main\&id=0\&first_nid=0\&last_nid=49999
}
source source_main1 : source_main0
{
        xmlpipe_command             = /usr/bin/wget -O - -q -t 1 http://www.domain.com/sphinxsearch_scripts/sphinxsearch_xmlpipe.php?mode=main\&id=1\&first_nid=50000
}

Этот код указывает на метод и адрес получения данных индексатором. Не рекомендую ничего менять, кроме адреса сайта. Для нормального запуска этой функции необходимо, чтобы папка "sphinxsearch_scripts" находилась в /path-to-drupal-root.

index index_main0
{
        source                                  = source_main0
        path                                    = /home/user/sphinx/index/main0
        docinfo                                 = extern
        morphology                              = stem_ru
        charset_type                    = utf-8
        charset_table                   = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
        min_word_len                    = 1
        html_strip                              = 0
       # agent                              = /home/user/sphinx/socket/sphinx.s

}
index index_main1 : index_main0
{
        source                                  = source_main1
        path                                    = /home/user/sphinx/index/main1
}

index index_join
{
        type                                    = distributed
        local                                   = index_main0
        local                                   = index_main1
        }

indexer
{
        mem_limit                               = 32M
}

Все эти настройки так или иначе относятся к индексации данных. Здесь Вы можете изменять и добавлять любые доступные настройки.

searchd
{
        #listen                          = /home/user/sphinx/socket/sphinx.s
        listen                          = localhost:3312
        log                             = /home/user/sphinx/log/searchd.log
        query_log                       = /home/user/sphinx/log/query.log
        read_timeout                    = 5
        max_children                    = 30
        pid_file                        = /home/user/sphinx/log/searchd.pid
        max_matches                     = 1000
        seamless_rotate                 = 1
        preopen_indexes                 = 1
        unlink_old                      = 1
}

Если Вам надо настроить соединение через сокет, то придется сделать небольшие изменения в sphinxapi.php .

Лирическое отступление о сокетах :) :

Открываем sphinxapi.php лежит в sphinxsearch\lib.
Ищем function SphinxClient () , после $this->_port добавляем $this->_socket = 0; .
Заменяем функцию function SetServer ( $host, $port ) на:

<?php
function SetServer $host$port )
    {
        
assert is_int($port) );
        
assert is_string($host) );
        
        if ( 
$host[0] == '/')
        {
            
$this->_host 'unix://' $host;
            
$this->_socket 1;
            
$this->_port 0;
            return;
        }
        elseif ( 
substr $host0)=="unix://" )
        {
            
$this->_host $host;
            
$this->_socket 1;
            
$this->_port 0;
            return;
        }
        else
        {
        
$this->_host $host;
        
$this->_port $port;
        }        
        }

?>

В function _Connect () после if ( !$fp ){ добавляем

<?php if ( $this->_socket=)
            {    
$location $this->_host;}
            else
                {
$location "{$this->_host}:{$this->_port}";}?>

Теперь Вы сможете запустить поискового демона, используя сокет.

Шаг второй!

Все подготовительные этапы завершены и можно копировать модуль на сервер.
Дальнейшая настройка никак не обойдется без ssh.
Сначала необходимо запустить индексатор. Для этого используем следующий код:

/usr/bin/indexer --config /home/user/sphinx/config/sphinx.conf --all

/usr/bin/indexer - путь до индексатора, путь и имя этого файла могут отличатся от моего.
--config /home/user/sphinx/config/sphinx.conf - указываем путь к файлу конфигурации.
--all - проиндексировать все существующие индексы.

Если индексация прошла успешно следует запустить поискового демона:
 /usr/sbin/searchd --config /home/user/sphinx/config/sphinx.conf

Остановить:
 /usr/sbin/searchd --config /home/user/sphinx/config/sphinx.conf --stop
Очистить процессы searchd:
 killall searchd или killall -9 searchd

Шаг третий!

Теперь можно перейти к настройкам модуля.
В поле "Sphinx searchd host name", если Вы настроили sphinxapi.php, помимо хоста можно вводить путь до сокета.
Другие настройки интуитивно понятные, так что описывать их не буду.
Если Вы правильно настроили модуль, то на странице "Check connection" будет примерно такой результат:

    *
      Testing Sphinx searchd daemon connection.
          o Да - Your Sphinx searchd daemon is up and running.
    *
      Testing search query using index index_main0.
          o Query asks for a list of all indexed documents to retrieve the last indexed node.
          o MySQL equivalent would look something like:
            SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
          o Да - Test passed successfully. Sphinx results summary follow:
                + Query execution time: 0.291 seconds
                + Total results found: 100
                + Total results available: 100
                + Last indexed node: 100 (2009-05-04 18:51:34)
    *
      Testing excerpts builder using index index_main0.
          o Да - Test passed successfully. Sphinx results summary follow:
                + Sample text: The quick brown fox jumps over a lazy dog.
                + Keywords: brown lazy
                + Result: The quick <b>brown</b> fox jumps over a <b>lazy</b> dog.

Спасибо за внимание и удачного Вам поиска!

С Уважением, Мария ( gagaga ).

0 Thanks

Комментарии

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 9 мая 2009 в 9:00

молодцом! :)
вопрос такой. какое количество документов у вас на сайте, что сфинкс так потребовался?
(я чтобы все из нас скопом не поперлись его ставить) :)

Аватар пользователя andyceo andyceo 9 мая 2009 в 10:39

Отличная статья, спасибо, что поделилась опытом!

кстати, всех с праздником!

Аватар пользователя Irbis Irbis 9 мая 2009 в 11:30

О спасибо, я на днях пытался его на сервере поставить, да чего то не встало. С вашей инструкцией буду пробовать ещё.

Аватар пользователя gagaga gagaga 9 мая 2009 в 13:01
"Ilya1st" wrote:

вопрос такой. какое количество документов у вас на сайте, что сфинкс так потребовался?
(я чтобы все из нас скопом не поперлись его ставить) :)

На самом деле нод немного, около 6000. Основная проблема была в морфологии и в специфичных заголовках. Так как большинство названий содержат буквы, цифры, точки и тире. К сожалению, стандартный поиск из-за этого не находил до 50% материала. Вот поэтому пришлось устанавливать Sphinx. Он с этой проблемой справился без проблем.

Аватар пользователя gagaga gagaga 9 мая 2009 в 13:14
"andyceo" wrote:

Отличная статья, спасибо, что поделилась опытом!

кстати, всех с праздником!

И Вас с праздником Великой победы! :)

Аватар пользователя cascad cascad 9 мая 2009 в 15:36

Sphinx можно установить только на виртуальный хост? т.е. на тариф за 150 рэ в месяц - не поставить?

Аватар пользователя gagaga gagaga 11 мая 2009 в 13:59
"cascad" wrote:

Sphinx можно установить только на виртуальный хост? т.е. на тариф за 150 рэ в месяц - не поставить?

Можно и не на виртуальный хост, но только если хостер согласится поставить сам бинарный пакет Sphinx на сервер. У Вас просто не будет для этого необходимых прав. А цена тарифа мне, например, ничего не говорит :)

Аватар пользователя Valeratal Valeratal 12 мая 2009 в 20:19

спасибо, полезно
глядишь когда нибудь окажется нужным

P.S. где бы надыбать тысяч 100 нод :)

Аватар пользователя batbug batbug 13 мая 2009 в 5:27

Как показала практика, проблемы с поиском могут возникнуть, начиная от 13 тысяч нод + 40 тысяч комментов. И это - на выделенном сервере.

Аватар пользователя Valeratal Valeratal 13 мая 2009 в 9:57

хм, эт плохо, у меня 17к нод
я правда использую гугл-модуль-поиска, но стандартный собирался включить из-за возможностей расширенного поиска

Аватар пользователя gor gor 14 июня 2009 в 5:29

Рад сообщить что окончательно внедрил поддержку sphinx на моем хостинге.

Настраивается по документации из этого топика. (Данная настройка изначально тестировалась и создавалась у меня на хостинге, потому должна работать)

Учтите что полный путь к бинарной програме демона: /usr/sbin/sphinx-searchd
к индексеру /usr/bin/sphinx-indexer

Также, чтоб ваш демон запускался сразу же после ребута сервера, надо в крон прописать следующую задачу:

reboot /usr/sbin/sphinx-searchd --config /home/username/YOUR_SPHINX.CONF

Еще раз спасибо gagaga за проведеную работу и помощь!

Аватар пользователя batbug batbug 16 июня 2009 в 18:48

Спасибо за статью, внедрил этот модуль на своем сайте (хостинг у Гора) строго по вашей инструкции, но результат очень удивил. 14000 нод, 45000 каментов, 1000 юзеров зареганных юзеров, в среднем онлайн 15-20 человек, среднее время генерации одной страницы для зареганного - 1-1.5 секунды. НО поиск через сфинкса занимает 10-20 секунд! Обычный друпаловский поиск примерно так же работает. Это нормально? Если нет, то куда смотреть?

Пробовал и хостом, и через сокет.

Аватар пользователя gagaga gagaga 18 июня 2009 в 10:15

Я не знаю, у меня не так много материала на сайте. Но у меня достаточно долго ищет, если включить дополнительные блоки, например фасеточный поиск. Как раз с ним у меня скорость не отличалась от встроенного поиска. Без этих блоков ищет: 7392 documents found in 0.043 seconds.

Аватар пользователя batbug batbug 18 июня 2009 в 14:55

Спасибо за ответ. У меня ситуация такая: все дополнительные блоки на странице поиска отключены, оставлен самый минимум, фасеточный блок отключен тем более. По логам сфинкса скорость его поиска тоже мгновенная, примерно как у вас. Однако время генерации страницы со результатами поиска огромно, как я уже написал 10-20 секунд. Т.е. получается, что сфинкс ищет-то быстро, но сам друпал тормозит. Что делать - ума не приложу.

Аватар пользователя batbug batbug 22 июня 2009 в 6:11

Ок, благодаря помощи Gor'a проблемное место было найдено, и проблема решена. В чем суть: в файле shpinxsearch.module есть функция sphinxsearch_get_node_text(&$node, $build_mode), она возвращает весь текст заданной ноды. Эта фунция используется в двух местах - при индексации контента и при выводе результатов поискового запроса (конкретно, для построения т.н. отрывка текста). В этой функции есть кусок

<?php
  
// Fetch extra data normally not visible
  
$extra node_invoke_nodeapi($node'update index');
  foreach (
$extra as $t) {
    
$text .= $t;
  }
  unset(
$extra$t);
?>

Если выкинуть этот кусок кода, то поиск ускоряется в 10 раз, и работает моментально, как надо. Оно и понятно: это код на каждый найденный документ запускает его переиндексацию только лишь для того, чтобы точнее показать т.н. "отрывок текста" из ноды! Для вывода результатов поиска это ИМХО лишнее.

Но этот же код нужен для индексации. Значит берем функцию sphinxsearch_get_node_text(&$node, $build_mode), дублируем её в конец файла shpinxsearch.module, переименовываем её в function sphinxsearch_get_node_text_fast(&$node, $build_mode) и удаляем из нее кусок

<?php
  
// Fetch extra data normally not visible
  
$extra node_invoke_nodeapi($node'update index');
  foreach (
$extra as $t) {
    
$text .= $t;
  }
  unset(
$extra$t);
?>

Затем находим функцию, которая выполняет поисковый запрос: в файле shpinxsearch.common.inc - function sphinxsearch_execute_query($search_options), и на 624 строке меняем название функции:

-      $search_results['excerpts'][] = sphinxsearch_get_node_text($node, NODE_BUILD_SEARCH_RESULT);
+      $search_results['excerpts'][] = sphinxsearch_get_node_text_fast($node, NODE_BUILD_SEARCH_RESULT);

Теперь у нас индексация выполняется как обычно, а поиск - без лишних запросов и в 10 раз быстрее, чем раньше.

В итоге - сфинкс рулит!

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 22 июня 2009 в 10:36
"batbug" wrote:

Теперь у нас индексация выполняется как обычно, а поиск - без лишних запросов и в 10 раз быстрее, чем раньше.

В итоге - сфинкс рулит!

патч пошлите разрабам. это явный баг

Аватар пользователя batbug batbug 22 июня 2009 в 16:24

Я не думаю, что это баг, потому что с этими строками кода "отрывок текста" релевантнее выглядит, и потом, разработчику совсем не до модуля, так что особого смысла нет в этом.

Аватар пользователя Irbis Irbis 22 июня 2009 в 18:02

Sphinx 0.9.9-rc2, Ubuntu 8, Sphinxsearch 6.x-1.x-dev от 2008-Nov-08, Drupal 6.12, использую приведённый вами конфиг. После настройки модуля получаю на странице проверки соединения со Sphinx:

Testing search query using index .
o Query asks for a list of all indexed documents to retrieve the last indexed node.
o MySQL equivalent would look something like: SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
o ERROR - Sphinx query index not specified. Please, check module settings to match your Sphinx server configuration.

Testing excerpts builder using index .
o ERROR - Sphinx excerpts index not specified. Please, check module settings to match your Sphinx server configuration.

Хотя вроде бы всё настроил, не подскажете, что пропустил?

Аватар пользователя batbug batbug 23 июня 2009 в 6:01

Больше похоже, что в настройках модуля неверно указаны индексы для поиска

Аватар пользователя Irbis Irbis 23 июня 2009 в 11:16

Да через шелл я запустил демона и и индексатор. В sphinx.conf - пути указал правильно иначе индексатор не запускается. В настройках модуля выбрал тип нод по которым хочу осуществлять поиск. Чего ещё посоветуете? А то хочется Sphinx...

Аватар пользователя Irbis Irbis 24 июня 2009 в 15:13

Понял свою ошибку, индексы неправильно указал. batbug - Большое тебе человеческое спасибо!!!

Аватар пользователя gotomail gotomail 26 июня 2009 в 17:43

А Сфинксом можно искать по части слова? Например есть слово "Автомобили" и нужно его найти по запросу "Авто".
Т.к. при стандартной установке и использовании такой возможности не наблюдаю!
Спасибо!

Аватар пользователя SlavviR SlavviR 12 августа 2009 в 23:02

Здравствуйте, будьте добры подскажите, что я упустил

При запуске индексатора, выходит:

/home/***/***.ru/sites/all/modules/sphinxsearch/docs/contrib$ /usr/local/bin/indexer --config /usr/local/etc/sphinx.conf --all
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'index_drupal_example_main0'...
ERROR: index 'index_drupal_example_main0': xmlpipe: expected '<document>', got 'Could not locate Drupal's bootstrap.inc script. This script sho'.
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
indexing index '
index_drupal_example_main1'...
ERROR: index '
index_drupal_example_main1': xmlpipe: expected '<document>', got 'Could not locate Drupal's bootstrap.inc script. This script sho'.
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
indexing index 'index_drupal_example_delta'...
ERROR: index 'index_drupal_example_delta': xmlpipe: expected '<document>', got 'Could not locate Drupal's bootstrap.inc script. This script sho'.
total 0 docs, 0 bytes
total 0.010 sec, 0.00 bytes/sec, 0.00 docs/sec
distributed index '
index_drupal_example_join' can not be directly indexed; skipping.

А тестируя в модуле, первый и последний тесты положительные, а вот Testing search query using index
выдаёт:

Testing search query using index index_drupal_example_join.
Query asks for a list of all indexed documents to retrieve the last indexed node.
MySQL equivalent would look something like:
SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
ERROR - Search query failed.
Sphinx message: index index_drupal_example_delta,index_drupal_example_main0,index_drupal_example_main1: sort-by attribute 'nid' not found
Аватар пользователя gagaga gagaga 13 августа 2009 в 0:24

А Вы этот шаг выполнили:
необходимо, чтобы папка "sphinxsearch_scripts" находилась в /path-to-drupal-root.

И что у Вас в конфиге написано?

Аватар пользователя SlavviR SlavviR 10 ноября 2015 в 11:46

вполне возможно, что здесь и кроется погрешность

я не понял, что значит /path-to-drupal-root
и судя по ссылке указанной в конфиге
http://www.***.ru/sphinxsearch_scripts/sphinxsearch_xmlpipe.php

папку «sphinxsearch_scripts» переместил в корневую директорию сайта ***.ru/sphinxsearch_scripts

Аватар пользователя gagaga gagaga 13 августа 2009 в 13:15

/path-to-drupal-root это главная папка, в которой находится index.php и т.д.
Где у вас находится вот этот адрес /var/db/sphinxsearch/data/drupal_example/main0, он вообще существует?
Все файлы которые относятся к сфинксу могут находится только в Вашей домашней папке и глубже.
В Вашем случае это /home/***/. Ваша команда вызова индексатора может выглядеть так: /usr/local/bin/indexer --config /home/***/путь до конфига/sphinx.conf --all , и соответственно путь к индексам, логам и т.д. также должен начинаться с /home/***/.
А Вы демона запустили? И какой командой?

Аватар пользователя SlavviR SlavviR 13 августа 2009 в 14:26

такой адрес существует (/var/db/sphinxsearch/data/drupal_example/main0), и там появились различные файлы, подобно delta.spp, main0.spp, main1.spp... с различными другими расширениями .spa, .spd, .sph, .spi...

команда вызова индексатора
/usr/local/bin/indexer --config /usr/local/etc/sphinx.conf --all

демона запускал, всё успешно
/usr/local/sbin/searchd --config /usr/local/etc/sphinx.conf

Аватар пользователя Kane@drupal.org Kane@drupal.org 16 октября 2009 в 21:44

Помогите пожалуйста, все по инструкции настроил, нажимаю Check Connection в настройках сфинкса в друпале, выдает следующее:
Testing Sphinx searchd daemon connection.
* ERROR - Unable to connect to your Sphinx searchd daemon.
o searchd host: localhost
o searchd port: 3312
o Sphinx message: connection to localhost:3312 failed (errno=111, msg=Connection refused)

P.S. странная ошибка в индексе дельта
ERROR: index 'index_drupal_example_delta': xmlpipe: expected '', got 'XMLPipe for delta index failed: Could not obtain list of main i'.
Это значит что нужно создавать в базе таблицу с каунтером и на него ссылаться в conf файле?

Вдогонку такой вопрос: Каждый запуск индексации сфинкс просматривает только новые ноды или все заново?

Спасибо.

Аватар пользователя Rick Rick 27 октября 2009 в 17:44

В нашем случае есть небольшая проблема, которая выражается в том, что пока сфинкс не запущен, дельта не может быть создана из-за того, что xmlpipe при генерации дельты использует данные из запущенного сфинкса.
Получается замкнутый круг. У меня пока получается так, что индекс дельты не создается при первичной индексации, я запускаю сфинкс, индексирую дельту, она создается, но не попадает в поисковый джоин, объединяющий индекс+дельту.

Аватар пользователя vgoodvin vgoodvin 28 октября 2009 в 20:58

Похожая история. Там новый модуль для шестерки. Ни документации, ни пояснений, ничего. Похоже надо сначала хорошенько сам sphinx изучить, настроить и только потом подключать модуль. Только времени как всегда нет. Если получится отпишусь.

Аватар пользователя slam slam 11 ноября 2009 в 17:34

Возникла проблема...почти как предыдущие но немного другая...
Все сделал как написано выше, но по нажатию Check Connection выдает следующее:
*
Testing Sphinx searchd daemon connection.
o OK - Your Sphinx searchd daemon is up and running.
*
Testing search query using index index_drupal_example_join.
o Query asks for a list of all indexed documents to retrieve the last indexed node.
o MySQL equivalent would look something like:
SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
o ERROR - Search query failed.
+ Sphinx message: index index_drupal_example_main0,index_drupal_example_main1: sort-by attribute 'nid' not found
*
Testing excerpts builder using index index_drupal_example_main0.
o OK - Test passed successfully. Sphinx results summary follow:
+ Sample text: The quick brown fox jumps over a lazy dog.
+ Keywords: brown lazy
+ Result: The quick brown fox jumps over a lazy dog.
и еще при запуске индексатора
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/config/sphinx.conf --all
выдает ошибку - distributed index 'index_drupal_example_join' can not be directly indexed; skipping. В чем может быть проблема?

Аватар пользователя Rick Rick 16 ноября 2009 в 18:21
"slam" wrote:

и еще при запуске индексатора
/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/config/sphinx.conf --all
выдает ошибку - distributed index 'index_drupal_example_join' can not be directly indexed; skipping. В чем может быть проблема?

Это фича Сфинкса. Можно не обращать внимания.

Quote:

This is an email just to highlight something that isn't actually an
error, but trips a lot of people up (myself included).

When you run an index on your data, you may get the following error
message:

> distributed index 'model_name' can not be directly indexed; skipping

A distributed index is made up of other indexes. It doesn't need to be
indexed, but Sphinx tries to anyway, and then complains when it can't.
I'm not sure about the reasoning for this, but it's not important: You
can ignore the error, it doesn't stop anything working, searching and
indexing will happen as expected.

http://groups.google.com/group/thinking-sphinx/browse_thread/thread/c4ef...

Quote:

Testing search query using index index_drupal_example_join.
o Query asks for a list of all indexed documents to retrieve the last indexed node.
o MySQL equivalent would look something like:
SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
o ERROR - Search query failed.
+ Sphinx message: index index_drupal_example_main0,index_drupal_example_main1: sort-by attribute 'nid' not found

А индекс правильно создается? Посмотрите, правильно ли отдаются xml данные индексатору.

Аватар пользователя T-34 T-34 23 ноября 2009 в 1:45

У меня такая же проблема. При запуске индексатора

indexing index 'index_main0'...
ERROR: index 'index_main0': source 'source_main0': XML parse error: no element found (line=150999, pos=0, docid=17479).
total 13494 docs, 6722173 bytes
total 61.388 sec, 109502 bytes/sec, 219.81 docs/sec
indexing index 'index_main1'...
collected 0 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, nan% done
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec
indexing index 'index_delta'...
ERROR: index 'index_delta': xmlpipe: expected '<document>', got 'XMLPipe for delta index failed: Could not obtain list of main i'.
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec
distributed index 'index_join' can not be directly indexed; skipping.
total 1 reads, 0.000 sec, 32.0 kb/call avg, 0.0 msec/call avg
total 4 writes, 0.000 sec, 2.4 kb/call avg, 0.0 msec/call avg

Во-первых, какая-то ошибка возникает при создании первого индекса, и в него попадают не все ноды.
Во-вторых, не создается индекс index_delta по причине "XMLPipe for delta index failed: Could not obtain list of main indexes from Sphinx."

В результате на странице проверки соединения такая картина:

  • Testing Sphinx searchd daemon connection.
  • OK - Your Sphinx searchd daemon is up and running.
  • Testing search query using index index_join.
  • Query asks for a list of all indexed documents to retrieve the last indexed node.
  • MySQL equivalent would look something like:
  • SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
  • OK - Test passed successfully. Sphinx results summary follow:
  • Query execution time: 0.009 seconds
  • Total results found: 0
  • Total results available: 0
  • Last indexed node: N/A - Oops! It apears that your Sphinx indexes are empty.
  • WARNING - There was a problem while trying to resolve the query.
  • Sphinx message: index index_delta,index_main0: sort-by attribute 'nid' not found
  • Testing excerpts builder using index index_main0.
  • OK - Test passed successfully. Sphinx results summary follow:
  • Sample text: The quick brown fox jumps over a lazy dog.
  • Keywords: brown lazy
  • Result: The quick brown fox jumps over a lazy dog.

Есть ли у кого-то предположения, в чем дело?

Аватар пользователя slam slam 24 ноября 2009 в 11:02
Rick wrote:
"slam" wrote:

Testing search query using index index_drupal_example_join.
o Query asks for a list of all indexed documents to retrieve the last indexed node.
o MySQL equivalent would look something like:
SELECT nid FROM {node} ORDER BY nid DESC LIMIT 1;
o ERROR - Search query failed.
+ Sphinx message: index index_drupal_example_main0,index_drupal_example_main1: sort-by attribute 'nid' not found

А индекс правильно создается? Посмотрите, правильно ли отдаются xml данные индексатору.

А как это проверить!?
После запуска индексатора получаю следующий результат:

[~]$/usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all
Sphinx 0.9.9-rc2 (r1785)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/usr/local/sphinx/etc/sphinx.conf'...
indexing index 'nodeIndex'...
collected 10376 docs, 39.9 MB
sorted 1.3 Mhits, 46.7% done
total 10376 docs, 39900724 bytes
total 33.480 sec, 1191750 bytes/sec, 309.90 docs/sec
total 2 reads, 0.017 sec, 1820.1 kb/call avg, 8.8 msec/call avg
total 11 writes, 0.085 sec, 786.0 kb/call avg, 7.7 msec/call avg
[~]$ /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/config/sphinx.conf
Sphinx 0.9.9-rc2 (r1785)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/usr/local/sphinx/config/sphinx.conf'...
listening on 127.0.0.1:3312
*******
Ошибка так и осталась.

Аватар пользователя gor gor 24 ноября 2009 в 18:45
v1adimir wrote:

а почему выбор был в пользу Sphinx, а не Apache Solr?

есть еще другой момент

Apache Solr - написан на java
sphinx - написан на C, C++

Соответственно первое решение требует выделеного сервера, а второе можно запстить даже на обычном хостинге.

Аватар пользователя Rick Rick 24 ноября 2009 в 14:11

Для проверки правильности выдачи XML через ssh напрямую запросите выдачу: /usr/bin/wget -O - -q -t 1 http://www.domain.com/sphinxsearch_scripts/sphinxsearch_xmlpipe.php?mode...\&id=0\&first_nid=0\&last_nid=49999
Только пусть записывает в файл.

2T-34

Quote:

Во-первых, какая-то ошибка возникает при создании первого индекса, и в него попадают не все ноды.

Скорее всего у вас много CCK полей, либо иных модулей, которые тормозят выполнение node_load (каждый раз node_load начинает собирать все поля от модулей), в связи с чем после энного кол-ва node_load, происходит переполнение пыховского лимита памяти и xml прекращает отдаваться. Обход - переделать механизм выдачи. Уйти от node_load и собирать весь xml самому (в обход модульному методу). Такой подход позволяет ускорить индексацию в сотни раз (с node_load 1000 нод индексировалась в среднем за 1,5 минуты, а с ручной сборкой, 1000 нод проходила за 1,5 секунды).

Quote:

Во-вторых, не создается индекс index_delta по причине "XMLPipe for delta index failed: Could not obtain list of main indexes from Sphinx."

Дельта не создастся, если сфинкс не поднят (а при первичной индексации он не может быть поднят никак). Увы, это такая особенность работы с xmlpipe. Я обычно пропускаю эту ошибку, а потом, чтобы delta начала обрабатываться, копирую файлики дельты руками.

"v1adimir" wrote:

а почему выбор был в пользу Sphinx, а не Apache Solr?

Говорят морфология хорошая у сфинкса.

Аватар пользователя slam slam 10 ноября 2015 в 11:46
Rick wrote:

Для проверки правильности выдачи XML через ssh напрямую запросите выдачу: /usr/bin/wget -O - -q -t 1 http://www.domain.com/sphinxsearch_scripts/sphinxsearch_xmlpipe.php?mode...\&id=0\&first_nid=0\&last_nid=49999
Только пусть записывает в файл.

Сделал все как написано. выкладываю свой конфиг + принтскрины настроек на сайте.

[php@wwwmoodle sphinxsearch_scripts]$ /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all
Sphinx 0.9.9-rc2 (r1785)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/usr/local/sphinx/etc/sphinx.conf'...
WARNING: key 'type' is not multi-value; value in /usr/local/sphinx/etc/sphinx.conf line 220 will be ignored.
indexing index 'index_main0'...
collected 10376 docs, 39.9 MB
sorted 1.3 Mhits, 46.7% done
total 10376 docs, 39900724 bytes
total 29.912 sec, 1333931 bytes/sec, 346.88 docs/sec
indexing index 'index_main1'...
collected 10376 docs, 39.9 MB
sorted 1.3 Mhits, 46.7% done
total 10376 docs, 39900724 bytes
total 9.102 sec, 4383613 bytes/sec, 1139.93 docs/sec
distributed index 'index_join' can not be directly indexed; skipping.
total 4 reads, 0.090 sec, 1823.5 kb/call avg, 22.7 msec/call avg
total 22 writes, 0.185 sec, 787.9 kb/call avg, 8.4 msec/call avg
[php@wwwmoodle sphinxsearch_scripts]$ /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf
Sphinx 0.9.9-rc2 (r1785)
Copyright (c) 2001-2009, Andrew Aksyonoff

using config file '/usr/local/sphinx/etc/sphinx.conf'...
WARNING: key 'type' is not multi-value; value in /usr/local/sphinx/etc/sphinx.conf line 220 will be ignored.
listening on 127.0.0.1:3312

Индексы создаются...XML файл напрямую через ssh создается и содержит нужную информацию. Но в закладке "Check connection" на втором тесте так и осталась ошибка. Подскажи пожалуйста что нетак и где подправить, уже недели две парюсь и никак(((((

Аватар пользователя T-34 T-34 24 ноября 2009 в 19:48

Т. е. юзать sphinx предлагаете?

"Rick" wrote:

Я обычно пропускаю эту ошибку, а потом, чтобы delta начала обрабатываться, копирую файлики дельты руками.

Не понял, откуда берутся файлы дельты, если она не создается?э

---
Первую проблему решил уменьшением числа нод на индекс.

Аватар пользователя Rick Rick 25 ноября 2009 в 14:21
"slam" wrote:

Индексы создаются...XML файл напрямую через ssh создается и содержит нужную информацию. Но в закладке "Check connection" на втором тесте так и осталась ошибка. Подскажи пожалуйста что нетак и где подправить, уже недели две парюсь и никак(((((

Я не гуру в конфигах сфинкса, но я вижу у Вас для одного и того же индекса "source_main0" сразу два типа получения данных: mysql и xmlpipe.
Возьмите пример конфига из этой темы, либо прямо из модуля сфинкссерч и работайте с ним.

"T-34" wrote:

Не понял, откуда берутся файлы дельты, если она не создается?э

Вы запустите индексатор и посмотрите в папку, где лежат индексы. По крайней мере у меня в этой папке лежали все файлы дельт, но с расширением .new. Переименовал их руками, запустил индексатор на дельту и все стало на свои места.

Аватар пользователя slam slam 25 ноября 2009 в 15:17
Rick wrote:
"slam" wrote:

Индексы создаются...XML файл напрямую через ssh создается и содержит нужную информацию. Но в закладке "Check connection" на втором тесте так и осталась ошибка. Подскажи пожалуйста что нетак и где подправить, уже недели две парюсь и никак(((((

Я не гуру в конфигах сфинкса, но я вижу у Вас для одного и того же индекса "source_main0" сразу два типа получения данных: mysql и xmlpipe.
Возьмите пример конфига из этой темы, либо прямо из модуля сфинкссерч и работайте с ним.

Из-за оф.инфы что он работает с БД запутался. Счас исключил Бд и все заработало! Спасибо огромное автору темы и Rick.

Аватар пользователя T-34 T-34 25 ноября 2009 в 16:40

Файлы дельты у меня есть с нормальными расширениями.

Сейчас у меня после индексации (индексируется все, кроме дельты) при запуске демона выдаются такие ошибки:
WARNING: index 'index_main': mlock() failed: Cannot allocate memory
WARNING: index 'index_main1': mlock() failed: Cannot allocate memory

И после этого индексатор не работает до остановки демона.
(говорит
indexing index 'index_main'...
FATAL: failed to lock /home/user/sphinx/index/main.spl: Resource temporarily unavailable, will not index. Try --rotate option.
)

Аватар пользователя Dark_kz Dark_kz 5 октября 2012 в 15:50
Rick wrote:
"T-34" wrote:

Не понял, откуда берутся файлы дельты, если она не создается?э

Вы запустите индексатор и посмотрите в папку, где лежат индексы. По крайней мере у меня в этой папке лежали все файлы дельт, но с расширением .new. Переименовал их руками, запустил индексатор на дельту и все стало на свои места.

Файлы дельты не нашел, в остальном с пропуском дельты indexer отработал нормально

Аватар пользователя gor gor 25 ноября 2009 в 16:14

Пожалуйста не забывайте использовать UNIX-socket , если вы используете sphinx на моем хостинге.

С Уважением, ЕГор

Аватар пользователя Rick Rick 26 ноября 2009 в 12:26
"T-34" wrote:

Файлы дельты у меня есть с нормальными расширениями.

Сейчас у меня после индексации (индексируется все, кроме дельты) при запуске демона выдаются такие ошибки:
WARNING: index 'index_main': mlock() failed: Cannot allocate memory
WARNING: index 'index_main1': mlock() failed: Cannot allocate memory

И после этого индексатор не работает до остановки демона.
(говорит
indexing index 'index_main'...
FATAL: failed to lock /home/user/sphinx/index/main.spl: Resource temporarily unavailable, will not index. Try --rotate option.
)

Тут увы уже ничем помочь не могу. Помню, ошибки возникали подобные, но только один раз. А чем вызваны были уже не помню. То ли sudo не было, то ли индекс неправильный был - честно не помню.

Аватар пользователя T-34 T-34 27 ноября 2009 в 0:12

Rick, спасибо, mlock заработал под рутом.
Еще я удалил все индексы и создал по новой, и в итоге у меня теперь файлы дельты вообще не создаются)

Еще есть, гм, важный вопрос по модулю: он что, не поддерживает поиск по терминам таксономии?

Аватар пользователя Rick Rick 1 декабря 2009 в 14:54
"T-34" wrote:

Rick, спасибо, mlock заработал под рутом.
Еще я удалил все индексы и создал по новой, и в итоге у меня теперь файлы дельты вообще не создаются)

Еще есть, гм, важный вопрос по модулю: он что, не поддерживает поиск по терминам таксономии?

Не за что! Я считаю, что после всех часов, что я пытался завести Сфинкс, я просто обязан поделиться опытом :) А то документации по нему (по модулю, а не сфинксу) кот наплакал...

По-умолчанию, поиск идет по полю с текстом ноды, а термины таксономии сохраняются в виде ID в . Т.к. модуль я переделывал, я менял выдачу данных для текста ноды (у меня в тексте остался только чистый текст без доп. CCK полей), но изначально в текст попадали имена термов, т.ч. можно считать, что модуль ищет и по термам, правда своим особым методом :)

Если нужен явный поиск по термам, но модифицируйте модуль:
1. Индексируйте доп. поле с именами термов
2. Дополните форму полем поиска термов, либо добавьте обработку к текущему (хотя я не уверен, что так получится)
3. Измените модуль, чтобы он обрабатывал это поле и выдавал результаты поиска по полю термов

Аватар пользователя Dexel Dexel 26 февраля 2010 в 21:05

Делал по мануалу. Т.е. дельта индекс не объявлял. Ситуация следующая.
XML-индексы движком выдаются.
Файлы индексов main0.xxx и main1.xxx создаются.
Переиндексация с консоли проходит успешно.
При попытке запустить демон:
creating server socket on 127.0.0.1:3312
failed to bind on 127.0.0.1:3312, retrying...
failed to bind on 127.0.0.1:3312, retrying...
failed to bind on 127.0.0.1:3312, retrying...
т.е. не может запуститься.
Поиск с консоли работает:

omen@ubuntu-desktop:~$ search --config /var/www/drupal/modules/sphinxsearch/daemon/sphinx.conf страница
Sphinx 0.9.8.1-release (r1533)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/var/www/drupal/modules/sphinxsearch/daemon/sphinx.conf'...
index 'index_main0': query 'страница ': returned 2 matches of 2 total in 0.000 sec

displaying matches:
1. document=1, weight=2, nid=1, uid=1, created=Tue Feb 23 23:02:13 2010, last_updated=Tue Feb 23 23:06:49 2010, vid=(), is_deleted=0, main_index_id=0
2. document=2, weight=2, nid=2, uid=1, created=Wed Feb 24 00:20:44 2010, last_updated=Wed Feb 24 00:21:00 2010, vid=(), is_deleted=0, main_index_id=0

words:
1. 'страниц': 2 documents, 68 hits

index 'index_main1': query 'страница ': returned 2 matches of 2 total in 0.000 sec

displaying matches:
1. document=1, weight=2, nid=1, uid=1, created=Tue Feb 23 23:02:13 2010, last_updated=Tue Feb 23 23:06:49 2010, vid=(), is_deleted=0, main_index_id=0
2. document=2, weight=2, nid=2, uid=1, created=Wed Feb 24 00:20:44 2010, last_updated=Wed Feb 24 00:21:00 2010, vid=(), is_deleted=0, main_index_id=0

words:
1. 'страниц': 2 documents, 68 hits

И ещё подскажите пож. Что указывать в настройках модуля, в полях:
index name for queryes ?
и index name for building excepts ?
Sphinx indexer IP addresses: ?

Конфигурация:
Drupal: 6.15
Сфинкс: 0.9.8.1
Модуль sphinxsearch:
sphinxapi.php,v 1.1
sphinxsearch.xmlpipe.inc,v 1.4.2.3

Помогите плис

Аватар пользователя Dexel Dexel 27 февраля 2010 в 15:18

2. Модуль таксономии включен. А в xml файле, формируемом sphinxsearch_xmlpipe.php нет таксономии. Только документы без иерархии. Почему?

Аватар пользователя Dock@drupal.org Dock@drupal.org 16 марта 2010 в 16:57

Спасибо за инструкцию. Правда у меня при индексировании возникает ошибка. Документов пока 9255.

using config file '/usr/local/etc/sphinx.conf'...
indexing index 'index_main0'...
WARNING: source 'source_main0': unexpected string 'Short on resources. Current memory usage is higher than 90% of P' (line=85438, pos=0) outside of and
WARNING: source 'source_main0': unexpected string ' PHP memory_limit: 268435456 bytes (262144 KB).' (line=85439, pos=0) outside of and
WARNING: source 'source_main0': unexpected string ' Initial memory usage: 10430096 bytes (10185.64 KB).' (line=85440, pos=0) outside of and
WARNING: source 'source_main0': unexpected string ' Current memory usage: 254047336 bytes (248093.1 KB).' (line=85441, pos=0) outside of and
ERROR: index 'index_main0': source 'source_main0': XML parse error: no element found (line=85443, pos=0, docid=5000).
total 4991 docs, 16300069 bytes
total 78.877 sec, 206650 bytes/sec, 63.27 docs/sec
indexing index 'index_main1'...
collected 0 docs, 0.0 MB
collected 0 attr values
sorted 0.0 Mvalues, nan% done
total 0 docs, 0 bytes
total 0.001 sec, 0 bytes/sec, 0.00 docs/sec
distributed index 'index_join' can not be directly indexed; skipping.
total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 4 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

UPD.: проблему решил. У меня в конфиге для индексатора было выделено 512мб, соответственно отсюда были и ошибки.

UPD.: Чтобы создать дельту, нужно в конфиге написать:
source source_main_delta : source_main0
{
xmlpipe_command = /usr/bin/wget -O - -q -t 1 http://www.example.com/sphinxsearch_scripts/sphinxsearch_xmlpipe.php?mod...
}

index index_main_delta : index_main0
{
source = source_main_delta
path = /usr/local/sphinx/var/data/delta
}

Аватар пользователя sadad sadad 28 апреля 2010 в 1:34

500 тысч. записей. Нашел такое решение проблемы:

For PHP5 I was able to do this to put a plug in the memory leak:

In file sphinxsearch.xmlpipe.inc, function: sphinxsearch_xmlpipe_document

Just before return $output

--

// Loop thru the node object and destroy its members

foreach($node as $k => $v) {
unset($node->$k);
}

unset($node, $k, $v);

Аватар пользователя patator patator 24 июня 2010 в 11:09

Подскажите, пожалуйста, sphinx можно настроить на поиск по нескольким определённым сайтам, как это делает, например, поиск Яндекса?

Аватар пользователя vgoodvin vgoodvin 24 июня 2010 в 11:35
"patator" wrote:

Подскажите, пожалуйста, sphinx можно настроить на поиск по нескольким определённым сайтам, как это делает, например, поиск Яндекса?

Можно. Через xmlpipe настроить точно можно. Тогда у вас индекс будет лежать на одном сервере. Читайте документацию, она на английском но довольно легка в освоении. А вот код модуля придется хакнуть, он все-равно заброшен. Например, добавить аттрибут "адрес сайта" и делать в соответствии с ним вывод ссылок в результатах запроса.

Аватар пользователя vgoodvin vgoodvin 24 июня 2010 в 11:40

Если уж надо сделать поиск не по своим сайтам, можете совсем извратиться и написать парсер нужных вам сайтов, который будет собирать xmlpipe и скармливать его сфинксу.
Но все вышесказанное мной только теория, я такого не делал, ибо не было такой необходимости.

Аватар пользователя patator patator 25 июня 2010 в 15:08

Сайты мои. При таких раскладах проще готовый поиск от гугл или яндекс...
Просто хотелось без рекламы.

Аватар пользователя sight sight 19 апреля 2011 в 5:47

FATAL: failed to open /usr/local/sphinx/var/data/main0.spl: No such file or directory, will not index. Try --rotate option.

кто то сталкивался ?

Аватар пользователя vgoodvin vgoodvin 19 апреля 2011 в 10:01
"sight" wrote:

FATAL: failed to open /usr/local/sphinx/var/data/main0.spl: No such file or directory, will not index. Try --rotate option.

Это вы демон (searchd) запускали? Если так, то вы либо не запускали индексатор, либо он неправильно отработал, либо файлы индекса пропали, либо что-то еще связанное с файлами индекса.

Аватар пользователя sight sight 19 апреля 2011 в 17:06

Это после

Сначала необходимо запустить индексатор. Для этого используем следующий код:

/usr/bin/indexer --config /home/user/sphinx/config/sphinx.conf --all

Аватар пользователя vgoodvin vgoodvin 19 апреля 2011 в 18:38
"sight" wrote:

Это после
Сначала необходимо запустить индексатор. Для этого используем следующий код:
/usr/bin/indexer --config /home/user/sphinx/config/sphinx.conf --all

Проверьте пути в конфигурационном файле. Возможно каталога /usr/local/sphinx/var/data/ просто не существует и индексатор не может поместить туда файлы индекса о чем и рапортует.
No such file or directory

Аватар пользователя sight sight 19 апреля 2011 в 19:33

Да таки пути были не верно указанны, теперь вот такая ошибка.

using config file '/home/sites/all/modules/sphinxsearch/docs/contrib/sphinx.conf'...
indexing index 'index_main0'...
ERROR: index 'index_main0': source 'source_main0' not found.
ERROR: index 'index_main0': no valid sources configured; skipping.
indexing index 'index_main1'...
ERROR: index 'index_main1': source 'source_main1' not found.
ERROR: index 'index_main1': no valid sources configured; skipping.
indexing index 'index_delta'...
ERROR: index 'index_delta': source 'source_delta' not found.
ERROR: index 'index_delta': no valid sources configured; skipping.
distributed index 'index_join' can not be directly indexed; skipping.
total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

в настройках файла sphinx.conf

index index_main0
{
source = source_main0
path = /usr/bin/sphinx-indexer/main0

Аватар пользователя vgoodvin vgoodvin 19 апреля 2011 в 21:00

Почему индексатор не находит сорцы мне не совсем понятно.
Для начала попробуйте указать нормальный путь до первого индекса. В Вашем случае это будет /usr/local/sphinx/var/data/main0 вместо /usr/sbin/sphinx-searchd/main0, т.к. вообще-то /usr/sbin/sphinx-searchd - это обычно сам поисковый демон, а вы указываете его как каталог в конфиге.

Аватар пользователя sight sight 20 апреля 2011 в 1:15

Учтите что полный путь к бинарной програме демона: /usr/sbin/sphinx-searchd

Пробовал все варианты на индексирует = (

может всем виновная dev Версия

Аватар пользователя sight sight 24 апреля 2011 в 13:49

indexing index 'index_main0'...
ERROR: index 'index_main0': xmlpipe: expected '', got 'Not authorized.
'.
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec

исправил выставлением параметра $access_xmlpipe = TRUE; в sphinxsearch_xmlpipe.php

Аватар пользователя AndreyAney AndreyAney 28 апреля 2011 в 14:04

Подскажите плиз.
Все настроил, индекс создал, sphinxsearch_scripts/sphinxsearch_xmlpipe.php выдает все что надо с читаемым текстом.

А вот поиск работает только по английским словам, числам итп, а вот русские слова не воспринимает...в чем может быть дело?

Аватар пользователя vgoodvin vgoodvin 28 апреля 2011 в 20:58
"AndreyAney" wrote:

Подскажите плиз.
Все настроил, индекс создал, sphinxsearch_scripts/sphinxsearch_xmlpipe.php выдает все что надо с читаемым текстом.
А вот поиск работает только по английским словам, числам итп, а вот русские слова не воспринимает...в чем может быть дело?

укажите

morphology = stem_enru

в конфиге Вашего первого индекса.

Затем заново запустите индексатор.

Аватар пользователя AndreyAney AndreyAney 29 апреля 2011 в 12:12

Спасибо за советы.
Но у меня все так и настроено. Все равно не хочет искать русский текст(

Где то на форумах видел, что был косяк с русскими запросами через GET.
В друпале ведь так же происходит /search-content?keys=плитка
...может в этом проблема?

Не дошли пока руки проверить через PHP API запросы отправить к сфинксу.

Аватар пользователя sight sight 10 ноября 2015 в 11:47

помогите с проблемой.

indexing index 'index_delta'...
ERROR: index 'index_delta': xmlpipe: expected '', got 'XMLPipe for delta index failed: Could not obtain list of main i'.
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec
distributed index 'index_join' can not be directly indexed; skipping.
total 3 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 13 writes, 0.000 sec, 1.5 kb/call avg, 0.0 msec/call avg

Аватар пользователя vgoodvin vgoodvin 29 апреля 2011 в 22:38
"sight" wrote:

Это вовсе не проблема. Поисковый демон у вас должен запустится. Когда в дельте появятся данные, сообщения исчезнут.

Аватар пользователя sight sight 30 апреля 2011 в 3:16

понял, пытаюсь запустить поискового демон ...

[Sat Apr 30 03:09:53.122 2011] [13776] listening on all interfaces, port=3312
[Sat Apr 30 03:09:53.122 2011] [13776] bind() failed on 0.0.0.0, retrying...
[Sat Apr 30 03:09:56.122 2011] [13776] bind() failed on 0.0.0.0, retrying...
[Sat Apr 30 03:10:29.122 2011] [13776] FATAL: bind() failed on 0.0.0.0: Illegal seek

Аватар пользователя vgoodvin vgoodvin 30 апреля 2011 в 10:43
"sight" wrote:

Тут уже как бы можно догадаться. Укажите параметр address в Вашем конфиге в разделе searchd. Попробуйте 127.0.0.1

Аватар пользователя sight sight 30 апреля 2011 в 17:08

vgoodvin спасибо за подсказки.

запускаю поискового демона
[Sat Apr 30 17:01:09.153 2011] [27638] WARNING: index 'index_join': no such local index 'index__main0' - SKIPPING LOCAL INDEX
[Sat Apr 30 17:01:09.153 2011] [27638] WARNING: index 'index_join': no such local index 'index__main1' - SKIPPING LOCAL INDEX

Аватар пользователя vgoodvin vgoodvin 30 апреля 2011 в 17:42
"sight" wrote:

[Sat Apr 30 17:01:09.153 2011] [27638] WARNING: index 'index_join': no such local index 'index__main0' - SKIPPING LOCAL INDEX
[Sat Apr 30 17:01:09.153 2011] [27638] WARNING: index 'index_join': no such local index 'index__main1' - SKIPPING LOCAL INDEX

Тут я бы посмотрел на определение индекса index_join. Вероятно у вас отсутствуют индексы index__main0 и index__main1.
Почитайте документацию http://sphinxsearch.com/docs/manual-0.9.9.html. Она написана на сухом техническом английском. Я со своими знаниями языка на троечку без особых проблем прочитал.

Аватар пользователя sight sight 30 апреля 2011 в 18:38

вот так вот в конфиге.

index index_join
{
type = distributed
local = index__main0
local = index__main1
local = index_delta
}

Аватар пользователя vgoodvin vgoodvin 30 апреля 2011 в 21:12
"sight" wrote:

вот так вот в конфиге.
index index_join
{
type = distributed
local = index__main0
local = index__main1
local = index_delta
}

"vgoodvin" wrote:

Вероятно у вас отсутствуют индексы index__main0 и index__main1

Аватар пользователя AndreyAney AndreyAney 3 мая 2011 в 11:57
"vgoodvin" wrote:

Отправьте через консоль.
sphinx -c CONFIG_FILE.conf [query]

Вы имели ввиду наверное search [query]?

Тоже не помогло...русские слова не ищет %(

Аватар пользователя vgoodvin vgoodvin 3 мая 2011 в 12:57
"AndreyAney" wrote:

Вы имели ввиду наверное search [query]?

Да все верно, исправил. Если и эта команда не находит русские слова, то я бы проверил приходят ли они вообще в индекс. Просмотрите генерируемый xmlpipe. Если там все ок и индексатор получает русский текст, а search его не находит, то советую изучить документацию и произвести настройку с нуля.

Аватар пользователя AndreyAney AndreyAney 3 мая 2011 в 17:20
"vgoodvin" wrote:

Да все верно, исправил. Если и эта команда не находит русские слова, то я бы проверил приходят ли они вообще в индекс. Просмотрите генерируемый xmlpipe. Если там все ок и индексатор получает русский текст, а search его не находит, то советую изучить документацию и произвести настройку с нуля.

Смотрел вывод xmlpipe ... да, русский язык есть, кодировка UTF8, но дальше что то происходит и в индекс он похоже не попадает... ладно, спасибо вам большое, попозжей попробую заново все настроить, если получится - отпишусь)

Аватар пользователя sight sight 5 мая 2011 в 22:14
"vgoodvin" wrote:

"vgoodvin" написал(а):

Вероятно у вас отсутствуют индексы index__main0 и index__main1

Попробовал почитать манул но так и не понял как проверить отсутствуют индексы или нет.

еще такой вопрос скажите как работает в sphinxsearch faced search ? и работает он там вообще ?

Аватар пользователя vgoodvin vgoodvin 6 мая 2011 в 13:04
"sight" wrote:

Попробовал почитать манул но так и не понял как проверить отсутствуют индексы или нет.

когда я смотрел Ваш конфиг, индексы отсутствовали в конфигурации. Это я и имею в виду.

"sight" wrote:

еще такой вопрос скажите как работает в sphinxsearch faced search ? и работает он там вообще ?

Это пакетные запросы (т.к. там не один запрос), каждый запрос с группировкой по атрибуту и сортировкой по количеству совпадений.
Вот пример http://api-meal.eu/memo/128-faceted-search-with-sphinx-and-php/

Аватар пользователя vgoodvin vgoodvin 6 мая 2011 в 13:06

Сейчас пилится интеграция сфинкса для Search API. О результатах сообщу сюда. Будет здорово если кто-то поможет с тестированием.

Аватар пользователя sight sight 10 ноября 2015 в 11:47

запускаю индекс вроде без ошибок, прикрепил скрин.

но во вкладке модуля, Check connection всё теже ошибки.
еще такой вопрос после выполнения команды запуска searchd какие сообщения должы быть ?
у меня вот так [Tue May 10 14:21:40.106 2011] [13558] listening on 127.0.0.1:3312

Аватар пользователя juliv juliv 12 мая 2011 в 14:52
"Rick" wrote:

WARNING: index 'index_main': mlock() failed: Cannot allocate memory

Аналогичная ситуация.
Установил вместо 32M 256М.
Ошибка осталась, но поиск производится (чему рад!), но одновременно хочу узнать, на что тогда влияет верхняя запись о нехватке памяти?

Аватар пользователя Sun-fire Sun-fire 26 октября 2011 в 1:29

Наткнулся на следующую проблему с индексацией в Sphinx.

Есть тринадцать индексов (index_main0 - index_main12) которые обрабатывают через sphinxsearch_xmlpipe ноды пачками по 1000 шт. Также есть дельта-индекс: index_delta

Суть трабла: первые два индекса (index_main0 и index_main1 а также index_main7 и index_main9) обрабатываются нормально. Данные втягиваются парсером, создаются индексные файлы. С остальными индексами грабли: индексер выдает ошибку следующего типа:

ERROR: index 'index_main2': source 'source_main2': XML parse error: no element found (line=20777, pos=0, docid=86987).

В чем может заключаться проблема такого "избирательного" сбоя, и как решить этот трабл?

Аватар пользователя vgoodvin vgoodvin 26 октября 2011 в 20:32
"Sun-fire" wrote:

Скачайте вручную XML-файл для этого проблемного индекса, посмотрите на указанную строку, там и разберетесь.

Аватар пользователя batbug batbug 31 октября 2011 в 19:57
"Sun-fire" wrote:

ERROR: index 'index_main2': source 'source_main2': XML parse error: no element found (line=20777, pos=0, docid=86987).

Два варианта:

1) Какая-то нода выдает ошибку пхп и отваливается при рендере, сделайте как vgoodvin пишет.

2) У пхп заканчивается память при индексации этой тысячи нод, надо разбить эту тысячу на 2 индекса по 500.

Аватар пользователя Sun-fire Sun-fire 31 октября 2011 в 21:46

Сори, вовремя забыл отписаться. Проблема была как раз в том, что на одну серию индексации из 1000 нод не хватало памяти. Уменьшение количества элементов на одну серию индексации помогло решить задачу.

Аватар пользователя Sun-fire Sun-fire 26 ноября 2011 в 2:52

Не совсем по теме, поскольку к конфигурированию не совсем относится. Пытаюсь подружить Ubercart с поиском на основе Sphinx. Стоит задача выводить в результат поиска только те товары, которые имеют положительный остаток на складе.

Исходя из логики модул яsphinxsearch , нужно при вызове функции sphinxsearch_execute_query($search_options),который происходит в sphinxsearch_search_page(), передать дополнительный элемент в $search_options, который будет вносить ограничение с учетом наличия на складе.

Кто-то уже решал похожую задачу? Не хочется изобретать велосипед, если возможно существует решение задачи.

Аватар пользователя GibsonG GibsonG 28 декабря 2011 в 10:23

Помогите настроить сфинкс. Перенесли сайт, перестал работать поиск. Точнее на продакшин работает только основной, а доска объявлений перестала работать. Со сфинксом сам не сталкивался, a настроить нужно.
На локальной копии не работает вообще. Хотя бы запустить на локальном сервере для начала...

В модуле во втором тесте:

ERROR - Search query failed.
Sphinx message: index lk_delta_index,lk_main_index: sort-by attribute 'nid' not found

Индекс создан.
Демон запущен
Поиск из командной строки работает
Обращение к /usr/bin/wget -O - -q -t 1 http://127.0.0.1:80/sphinxsearch_scripts/sphinxsearch_xmlpipe.php?mode=main и командной строки результат выдает.
папка sphinxsearch_scripts в корне сайта
Индекс /home/XXX/sphinx/data (на локальном)
Файлы дельты присутствуют
Конфиг который был sphinx.zip

Аватар пользователя Dark_kz Dark_kz 1 октября 2012 в 10:59

Доброго дня!
ОС Debian 6.
Sphinx 2.0.5
sphinxsearch 2.0
При попытке вызова indexer выдает следущее:
indexing index 'index_drupal_example_main0'...
WARNING: source 'source_drupal_example_main0': xmlpipe2 support NOT compiled in. To use xmlpipe2, install missing XML libraries, reconfigure, and rebuild Sphinx
ERROR: index 'index_drupal_example_main0': failed to configure some of the sources, will not index.
indexing index 'index_drupal_example_delta'...
ERROR: index 'index_drupal_example_delta': xmlpipe: expected '', got 'XMLPipe for delta index failed: Sphinx query index not specifie'.

Установил libexpat1-dev, переустанавливал sphinx (make clean)

Кто-нибудь сталкивался?

Аватар пользователя Dark_kz Dark_kz 2 октября 2012 в 9:35

Переустановил еще раз sphinx. При запуске indexer получаю следующую ошибку: <? php и другие < > написал раздельно, но в сообщение написано слитно
/usr/local/sphinx/bin/indexer --all
using config file '/usr/local/sphinx/etc/sphinx.conf'...
indexing index 'index_main0'...
ERROR: index 'index_main0': xmlpipe: expected '< document >', got '<? php

/**
* @file
* Handles incoming requests from Sphinx in'.
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec
indexing index 'index_delta'...
ERROR: index 'index_delta': xmlpipe: expected '< document>', got '<? php

/**
* @file
* Handles incoming requests from Sphinx in'.
total 0 docs, 0 bytes
total 0.000 sec, 0 bytes/sec, 0.00 docs/sec
skipping non-plain index 'index_join'...
total 0 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 0 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg

P.S: распишите пожалуйста "интуитивно-понятные настройки" :)

Аватар пользователя Dark_kz Dark_kz 3 октября 2012 в 8:54

Пробовал ставить версию 1.3, взятую с it-patrol. http://dh.it-patrol.ru/docs/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D...
Ссылка на модуль http://dh.it-patrol.ru/sites/drupalhosting.ru/files/sphinxsearch-1.3.tar.gz
Ошибка вся та же, судя по всему не формируется XML файл, сфинкс пытается прочесть его как XML, ожидая найти < document >, а получает <? php :(
При запуске sphinxsearch_xmlpipe.php с браузера индексация запускается нормально. Пробовал в конфиге использовать lynx, wget

Чего-то не хватает на сервере для запуска с командной строки?

Аватар пользователя Dark_kz Dark_kz 4 октября 2012 в 9:03

Продолжаю ходить в настройках. Поставил sphinxsearch-2.0-dev версию. Со скриптом xmlpipe.php сфинкс вроде заводится лучше. Но ошибка с < document > есть, правда только в индексе дельты.
P.S: еще такой баг возник: когда запускаю в командной строке indexer, авторизация на сайте отваливается, всех залогиненных "выкидывает"

Аватар пользователя Dark_kz Dark_kz 19 ноября 2012 в 14:28

Ошибка indexer все еще актуальна:

ERROR: index 'index_main0': xmlpipe: expected '< document >', got '<? php

Запуск searchd:

using config file '/usr/local/sphinx/config/sphinx.conf'...
listening on all interfaces, port=9312
precaching index 'index_m0'
precaching index 'index_m1'                                
...
precaching index 'index_m12'                                
precaching index 'index_delta'                              

WARNING: index 'index_delta': preload: failed to open /usr/local/sphinx/data/delta.sph: No such file or directory; NOT SERVING
precached 14 indexes in 0.023 sec

Аватар пользователя tuapse24 tuapse24 27 декабря 2012 в 8:22

Господа! А вот как эту проблему решить:

ERROR - Search query failed.
Sphinx message: searchd error: client version is higher than daemon version (client is v.1.25, daemon is v.1.22)

Оно проблема, что мне сам "Sphinx" сменять просто не получится. Может взять какую нибудь старенькую версию модуля?
Позже:
Эта проблема решена (установкой более ранней версии)

Но как теперь решить эту проблему:
ERROR - Search query failed.
Sphinx message: all remote agents unreachable and no available local indexes found

Testing excerpts builder using index source_main0.
ERROR - Unable to build excerpts.
Sphinx message: searchd error: unknown local index 'source_main0' in search request

Аватар пользователя Dark_kz Dark_kz 6 января 2013 в 18:07
"tuapse24" wrote:

ERROR - Search query failed.
Sphinx message: all remote agents unreachable and no available local indexes found

Testing excerpts builder using index source_main0.
ERROR - Unable to build excerpts.
Sphinx message: searchd error: unknown local index 'source_main0' in search request

Видимо проблема в индексах, indexer нормально срабатывает из консоли?

Аватар пользователя tuapse24 tuapse24 8 января 2013 в 12:24

Индексатор срабатывает нормально, правда выдает одни нули. Честно говоря я уже плюнул на эту затею и сделал поиск на сочетание Views с rch_autocomplete-6.x-2.3
Моих мозгов на этот сфинкс не хватает (недаром он и сфинкс :-) ) Вот бы лучше согласился бы автор топика проконсультировать меня за деньги.

Аватар пользователя WadimKo51 WadimKo51 18 января 2013 в 2:43

Возник вопрос.
Сфинкс индексирует комментарии, или только содержимое ноды?
Это важно при поиске по форуму. Если комментарии не индексирует, то большая часть содержимого не будет в поиске, это плохо.
На странице модуля видел что можно настроить на CCK комментарии, значит работать должно по идее по крайней мере после настройки.

Не могу понять, в готовом видео он обрабатывает комментарии или нет.
В коде есть кусок про комментарии, но логику пока понять не смог.
Там вызывается функция

<?php
  
foreach ($main_indexes_info as $main_index_id => $main_index_info) {
    
// Load the nids we are about to process for current main index interval.
    
$nids = array();
    
$query_sql 'SELECT n.nid FROM {node} n LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid
      WHERE '
implode(' AND 'array_filter(array('n.status = 1'sphinxsearch_get_enabled_node_types_condition('n')))) .'
        AND GREATEST(IF(c.last_comment_timestamp IS NULL, 0, c.last_comment_timestamp), n.changed) > %d
        AND n.nid >= %d'
;
    
$query_args = array($main_index_info['last_updated'], $main_index_info['first_nid']);
    if (
$main_index_id != $last_main_index_id) {
      
$query_sql .= ' AND n.nid <= %d';
      
$query_args[] = $main_index_info['last_nid'];
    }
?>

но не пойму что это. Такое ощущение, что это для сортировки результатов поиска.

Аватар пользователя WadimKo51 WadimKo51 20 января 2013 в 13:43

Да, спросил в поддержке хостинга IT-Patrol где размещён сайт, ответили однозначно, что комментарии индексируются, но в результатах поиска ссылка на ноду.
Но это по сути и нужно.
Ай, Ай, Ай, Ай как же бедный индексатор будет индесировать ноду с 50 и более комментаиями.
Надеюсь всё получится хорошо.

Спасибо.

P.S
Слушайте, а как поисковой индексатор ведёт себя если ему попадаетсья удалённая нода.
Нашёл у себя глюк, происходит индексация до ноды 99, а если запустить с сотой то всё идёт до конца.
Открываю ноду 99, страница не найдена. Вероятно нода была удалена.

Кто-нибудь с таким сталкивался.
Это глюк движка не доконца удалившего ноду, или глюк индексатора который спотыкаеться на несуществующей ноде, если её удалить?

Буду разбераться сам. Если нарою напишу.

P.P.S
Разобрался. Дело было не в ноде идущей за последней проиндексированной 98, а следующей после группы удалённых нод. Это была нода с опросом.