3

Sphinxを使用して大量のデータ(約5,000万行)を参照したかったのです。どうやら、max_matches構成を10,000に設定すると、最大10,000行しか参照できなくなります。制限を増やすと、サーバーの速度が大幅に低下するため、現時点では、max_matchesの最適な量は10,000です。

PHP APIを使用してSphinxにアクセスしており、SetFilterRange()、SetFilter()、SetSortMode()などの関数を使用する必要があります。

これで、Sphinxからデータをフェッチする必要があるときはいつでも、次のようになります。

// Some codes here to set filters
$sphinx->SetLimits( 100, 20 ); // Telling sphinx to return page 6
$results = $sphinx->query('');

これは問題ありませんが、10,000を超えて閲覧しようとしても、何も返されません。制限を無視して10,000を超えて閲覧する方法はありますか?

4

2 に答える 2

3

これはSphinx(CAVEAT EMPTOR部分)の既知の動作です。このフォーラムスレッドをお読みください。

提案されている回避策の1つは、構成で天文学的に大きな制限に設定し、SetLimitsを使用する場合は動的に減らすことです。

フォーラムスレッドからコピー

$cl->SetLimits(($currentPage-1)*50, 50, max(1000,($currentPage*50)+100)) );

しかし、Sphinxの背後にある考え方は、最初のページでクエリに対して良好な結果が得られるはずであるため、すべてを読みたくないということです。

于 2012-07-25T10:55:39.637 に答える
1

どのソート順を使用していますか?

タイムスタンプやドキュメントIDなど、定義された並べ替え順序の場合は、「ページング」を再定義してフィルターとして機能させることができます。これにより、高いオフセットを使用する必要がなくなります。

お気づきのように、高いオファーは悪です。それらを実現できる唯一の方法は、オフセットの前にすべてのドキュメントを処理してから、それらを破棄することです。たとえば、100000のオフセットは、100000行を計算してから破棄する必要があることを意味します。インデックスを使用できることをほぼ否定します。

于 2012-07-25T14:08:04.350 に答える