не удалось прочитать ответ searchd - PullRequest
1 голос
/ 15 сентября 2011

Я получил эту ошибку в Сфинксе.

{"status":"failed","status_message":"failed to read searchd response (status=2613, ver=11829, len=774975488, read=66)"}

PHP-файл >> Я использую этот учебник

<?php

require_once('sphinxapi.php');

$sphinxClient = new SphinxClient();
$sphinxClient->SetServer( 'localhost', 3306 );
$sphinxClient->SetConnectTimeout( 1 );

$sphinxClient->SetFieldWeights(array('title' => 70, 'body_text' => 30));

$sphinxClient->SetMatchMode( SPH_MATCH_EXTENDED2 );


$sphinxClient->SetLimits( 0, 20, 1000 );


$sphinxClient->SetRankingMode( SPH_RANK_PROXIMITY_BM25 );

$sphinxClient->SetArrayResult( true );

$searchQuery = "SELECT title FROM `documents` WHERE 1";
$searchResults = $sphinxClient->Query( $searchQuery, '*' );

$jhash = array();

if ( $searchResults === false )
{
    $jhash['status'] = 'failed';
    $jhash['status_message'] = $sphinxClient->GetLastError();
}
else
{
    if ( $sphinxClient->GetLastWarning() )
    {
        $jhash['status'] = 'warning';
        $jhash['status_message'] = $sphinxClient->GetLastWarning();
    }
    else
    {
        $jhash['status'] = 'good';
    }

    $jhash['result_total'] = $searchResults['total'];
    $jhash['result_found'] = $searchResults['total_found'];

    $jhash_matches = array();
    if ( is_array($searchResults["matches"]) )
    {
        $row_ids = array();
        foreach ( $searchResults["matches"] as $docinfo )
        {
            array_push($row_ids, mysql_real_escape_string($docinfo['id']));
        }
    }

    $jhash['matches'] = $jhash_matches;
}

echo json_encode($jhash);

?>

Есть идеи о причине проблемы?

Ответы [ 5 ]

4 голосов
/ 23 сентября 2011

измените номер порта на любой в вашем файле sphinx.conf.если ваш демон sphinx, слушающий 9312, изменит ваш код следующим образом:

$ sphinxClient-> SetServer ('localhost', 9312);

3 голосов
/ 19 августа 2013

У меня была такая же проблема.

В моем конфигурационном файле я был:

    listen             = 127.0.0.1:9312:mysql41

Мне пришлось добавить другого слушателя на другой порт

    listen             = 127.0.0.1:9312:mysql41
    listen             = 127.0.0.1:9313

и затем в PHP:

$sphinxsearch->SetServer( 'localhost', 9313 );

Не забудьте перезапустить sphinx searchd:

/usr/local/sphinx/bin/searchd --stop

и

/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/sphinx.conf
0 голосов
/ 20 декабря 2011

Посмотрите отчет об ошибке здесь . Проблема существует в PHP API при чтении данных с сервера sphinx.

0 голосов
/ 26 сентября 2011

Вы не можете смешивать SphinxQL и API. Ваш поисковый запрос является полным SphinxQL-запросом, который должен запрашиваться через php_mysql, а для запроса через API ypu следует использовать change на

$searchQuery = "";
$searchResults = $sphinxClient->Query( $searchQuery, 'documents' );

Мне также не хватает значения "ГДЕ 1";

А API и SphinxQL должны отображаться на разные порты.

0 голосов
/ 16 сентября 2011

Вы на самом деле управляете демоном Сфинкса?Вам нужно будет выполнить что-то вроде этого:

searchd --config sphinx.conf

(И чтобы остановить это, просто добавьте --stop к концу этого).

...