私はこのsphinx検索エンジンを持っており、sphinxapi.phpを使用してZendで使用しています。それは素晴らしい働きをします。本当に本当に素晴らしい。
ただし、1つの問題があります。それはランダムに失敗します。
// Prepare Sphinx search
$sphinxClient = new SphinxClient();
$sphinxClient->SetServer($ip, $port);
$sphinxClient->SetConnectTimeout( 10 );
$sphinxClient->SetMatchMode( SPH_MATCH_ANY );
$sphinxClient->SetLimits( $resultsPerPage * ($nPage - 1), $resultsPerPage );
$sphinxClient->SetArrayResult( true );
$query = array();
$query['lang'] = '@lang "lang' . $language . '"';
if (isset($params)) {
foreach ($params as $param) {
$query['tags'] = '@tags "' . $param . '"';
}
}
// Make the Sphinx search
$sphinxClient->SetMatchMode(SPH_MATCH_EXTENDED);
$sphinxResult = $sphinxClient->Query(implode(' ', $query), '*');
ここに見られるように、私は言語と任意の量のタグを検索し、最終的に単一のクエリ文字列に組み込まれます(サブクエリのバトルロードを作成する代わりに)。
したがって、通常、これは魅力のように機能しますが、時折、スフィンクスは英語で2000エントリ、たとえば「pictures」(またはその他の純粋な英語の単語)というタグが付いた1000エントリを検出したが、両方の結果に一致するヒットがゼロであると返します。純粋に誤りです。実際、ページを更新すると、すべてが通常の状態に戻り、800の実際の結果が得られます。
私の質問は、なぜそれがこれを行うのか、そしてどうすればそれを停止させるのかということです。
何か案は?
:編集:短縮された出力ログを追加
[error] =>
[warning] =>
...
[total] => 0
[total_found] => 0
[time] => 0.000
[words] => Array (
[langen] => Array (
[docs] => 2700
[hits] => 2701 )
[picture] => Array (
[docs] => 829
[hits] => 1571 ) ) )