使用coreseek併爲其做分頁

coreseek 做分頁時找數據總量還真不好找。以爲他會給一個方法(函數)什麼的去獲取,結果卻不是。

首先需要了解:

num_matches: 當前返回的結果數,<= limit設置值。

max_matches: 最多返回的結果數,默認爲1000,用戶最多隻能看到1000條搜索結果。這個是在csft_mysql.conf中設置的。

total_found: 結果總數。索引中所有滿足查詢條件的文檔總數。這個是在你查詢的返回結果中的數組中有的。當然前提是你必須在query前設置:$this->sc->SetArrayResult(true);

total: 最多返回結果數,取值取決於max_matches值和total_found值。如果total_found數超過max_matches,則total = max_matches,否則,total = total_found。這個也是在你查詢的返回結果中的數組中有的。當然前提也是你必須在query前設置:$this->sc->SetArrayResult(true);

這樣,瞭解了這幾個屬性之後就可以做分頁了。

我們應該使用返回值中的total來做分頁總數據。雖然這個不代表真實的返回值(當返回值大於max_matches,也就是1000,如真實返回2500,但是你卻只能得到1000)。

代碼是:

$this->sc->SetServer("127.0.0.1",9312);
		$this->sc->SetArrayResult(true);
		$this->sc->SetLimits($start,$page);
//如果需要搜索指定全文字段的內容,可以使用擴展匹配模式:
		$this->sc->SetMatchMode(SPH_MATCH_ANY); 
$res = $this->sc->Query($where,"main");
$count = $res['total'];

這個¥count就是我們要的分頁的總數據了。

其他的後續怎麼分頁是以樣式和數據結構做的,不能雷同,並且分頁也是基礎的東西,所以這裏就不再多說分頁的詳細問題了。我這裏單單討論這個總數據的取值情況。因爲很多人都取count($res['matches'])的值,但是這個是分頁後的返回結果,你只能得到10,或者20或者其他的值。呵呵,那就搞笑了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章