2012-11-01 88 views
0

我使用MySQL + Sphinx存儲了數百萬行數據。我們有網站查看我們數據庫中的所有信息。Sphinx獲得數百萬條結果

例如,電影名稱(100,000,000行)。我需要在我們的網站上查看所有這些內容,每頁100個標題。另外,我需要按演員的流行度來排序。

對於前10頁,所有的作品都很棒。但之後我達到了max_matches的限制。增加這個限制將迫使獅身人面像使用更多的CPU/RAM。

此外,我甚至不能將max_matches設置爲20,000,000

WARNING: max_matches=20000000 out of bounds; using default 1000

我可以使用MySQL來這樣執行查詢:

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

使用TID指數。但我無法通過tid對它進行分類。我需要根據其他表格中的信息對我的標題進行排序。

什麼是訪問數百萬行的最佳方式,排序並快速完成。請幫忙。

UPDATE:從斯芬克斯來源:/src/searchd.cpp

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

千萬是有限制嗎?我怎麼能抵消更多?

+1

這不建議,你可以分頁,不能? – ajreal

+0

你是什麼意思?問題是,我不能分頁... – twoface88

+1

你可以做的是將數百萬行分成更小的結果集,每次你只抓取1000條記錄,我的意思是,一個循環 – ajreal

回答

3

如果你的排序順序是基於一個屬性(演員人氣) - 而不是獅身人面像計算重量 - 那麼可以使用遊標來代替。

因爲可以按此屬性過濾。

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

我不得不懷疑壽,如果你真的需要它。每頁100個項目,1M的max_matches意味着10,000頁的結果。您的訪問者是否真的閱讀了10,000頁的結果?

1

使用LIMITselect api)檢索特定頁面。

任何你想要訂購的東西都需要包含在索引中,你不能在這裏使用連接。

+0

我仍然有偏移限制:錯誤1064(42000):查詢0錯誤:偏移超出範圍(偏移= 1000000,max_matches = 1000) – twoface88