0

MySQL + Sphinxを使用して、数百万行のデータを保存しています。データベースからのすべての情報を表示するためのWebサイトがあります。

たとえば、映画のタイトル(1億行)。私はそれらすべてを私たちのウェブサイトで見る必要があります。1ページあたり100タイトルです。また、俳優の人気順に並べ替えて表示する必要があります。

最初の10ページはすべてうまく機能します。しかしその後、max_matchesの制限に達しました。この制限を増やすと、sphinxはより多くのCPU/RAMを使用するようになります。

また、max_matchesを20,000,000に設定することもできません。

警告:max_matches=20000000が範囲外です。デフォルトの1000を使用

MySQLを使用して次のようなクエリを実行できます。

SELECT * FROM titles WHERE tid >= $start AND tid <= $end

tidインデックスを使用します。しかし、tidで並べ替えることはできません。他のテーブルの情報でタイトルを並べ替える必要があります。

何百万もの行にアクセスし、並べ替えてすばやく実行するための最良の方法は何ですか。助けてください。

更新:スフィンクスソースから:/src/searchd.cpp

if ( iMax<0 || iMax>10000000 )
{
    sphWarning ( "max_matches=%d out of bounds; using default 1000", iMax );
} else
{
    g_iMaxMatches = iMax;
}

10000000は限界ですか?それ以上のオフセットを取得するにはどうすればよいですか?

4

2 に答える 2

3

並べ替え順序が属性 (俳優の人気度) に基づいている場合 (スフィンクスが計算した重みではなく)、代わりにカーソルを使用できます。

この属性でフィルタリングできるからです。

http://sphinxsearch.com/forum/search.html?q=cursors&f=1

あなたが本当にそれを必要としているかどうか、私は疑問に思う必要があります. 1 ページあたり 100 アイテムの場合、1M の max_matches は 10,000 ページの結果を意味します。訪問者は本当に 10,000 ページの結果を読んでいますか?

于 2012-11-01T12:35:15.163 に答える
1

LIMIT( select api ) を使用して、特定のページを取得します。

並べ替えたいものはすべてインデックスに含める必要があります。ここでは結合を使用できません。

于 2012-11-01T03:42:44.150 に答える