文檔說明

搜索概述

在索引庫建立完成后,現在開始學習使用搜索功能,這也是最核心的部分。

1. 如何開始使用搜索?

PHP-SDK 中,搜索功能由類型為 XSSearch 的對象所維護。在 XS 項目中,通過讀取 XS::search 屬性來獲取搜索操作對象,然后展開使用,而不是自行創建對象。后面章節中的 相關測試代碼如果沒有特別編寫,其中的 $search 均為通過類似以下的方式獲取的索引對象:

require '$prefix/sdk/php/lib/XS.php';
$xs = new XS('demo'); // 建立 XS 對象,項目名稱為:demo
$search = $xs->search; // 獲取 搜索對象

Info: 搜索對象內置了字符集智能轉換,如果您使用的字符集和項目默認的字符集 XS::defaultCharset 不一致,請調用 XSSearch::setCharset 在開始其它搜索前設置正確的字符集。

2. 典型搜索做法

一個典型的搜索基本流程是把構建好的搜索語句,通過合適的 API 進行必要的修飾, 再傳遞給底層的搜索服務器進行處理,然后把匹配的結果返回。具體包括以下步驟:

  • 構建搜索查詢語句 query,然后調用 XSSearch::setQuery 設定它
  • 根據需要設置附加的查詢條件:通過 XSSearch::addWeight 干擾排名權重, 通過 XSSearch::addRange 添加字段搜索區間或范圍, 通過 XSSearch::setFuzzy 開啟模糊匹配,以獲取更多搜索結果
  • 進行必要的搜索結果限定:通過 XSSearch::setLimit 設置搜索結果數量和偏移, 通過 XSSearch::setSort 設置搜索結果的排序方式,等等
  • 執行搜索,并獲取搜索結果,關于搜索結果的處理詳見后面的章節

代碼如下:

$query = '項目測試'; // 這里的搜索語句很簡單,就一個短語
 
$search->setQuery($query); // 設置搜索語句
$search->addWeight('subject', 'xunsearch'); // 增加附加條件:提升標題中包含 'xunsearch' 的記錄的權重
$search->setLimit(5, 10); // 設置返回結果最多為 5 條,并跳過前 10 條
 
$docs = $search->search(); // 執行搜索,將搜索結果文檔保存在 $docs 數組中
$count = $search->count(); // 獲取搜索結果的匹配總數估算值

Tip: 除了調用 XSSearch::search 獲取搜索結果外,在某些情況我們可能只想知道結果的命中數量, 那么可以直接調用 XSSearch::count 來獲取。但要指出的是,這個結果計數只是一個估算值。

3. 關于快捷搜索

除了上述的典型搜索方式外,我們還提供一種稱為快捷搜索的方式。其實就是直接將 query 語句作為參數傳遞給相應的 API 調用 XSSearch::countXSSSearch::search。由于不經過 setQuery 因此有些其它輔助的功能受到 限制,比如不能進行結果高亮、不能通過 addWeight、addRange 增加輔助搜索條件。

$count = $search->count('項目測試'); 
$docs = $search->search('項目測試');
4. 搜索中的串接操作

由于 Xunsearch PHP-SDK 全面采用面向對象的編程思想,在搜索對象中對部分搜索語句構建、 搜索結果修飾加入了串接操作支持。支持串接操作的方法有:

  • addDB($name) - 用于多庫搜索,添加數據庫名稱
  • addRange($field, $from, $to) - 添加搜索過濾區間或范圍
  • addWeight($field, $term) - 添加權重索引詞
  • setCharset($charset) - 設置字符集
  • setCollapse($field, $num = 1) - 設置搜索結果按字段值折疊
  • setDb($name) - 設置搜索庫名稱,默認則為 db
  • setFuzzy() - 設置開啟模糊搜索, 傳入參數 false 可關閉模糊搜索
  • setLimit($limit, $offset = 0) - 設置搜索結果返回的數量和偏移
  • setQuery($query) - 設置搜索語句
  • setSort($field, $asc = false) - 設置搜索結果按字段值排序

如果采用串接操作,那么上面的搜索語句可以改寫如下,有種一氣呵成的感覺:

$docs = $search->setQuery('項目測試')->addWeight('subject', 'xunsearch')->setLimit(5, 10)->search();
5. 搜索日志

在每一次正常搜索之后,系統內部均對相應的關鍵詞做了記錄和一并分析。但這個行為并不是實時的, 而是積累一定的量后再統一分析和處理。

搜索日志保存在 $prefix/項目名/log_db 中,它是一個獨立的索引庫,通過它實現了包括相關搜索、 拼音搜索、糾錯建議等功能。

Tip: 如果您需要強制同步搜索日志庫,請參見 Indexer 索引管理工具--flush-log 選項。
此外,只有當您的搜索代碼中調用了 XSSearch::setQuery 并配合不帶參數的 XSSearch::search 調用, 才會記錄本次搜索關鍵詞。

6. 如何進行多庫搜索?

索引概述中我們曾經提到,如果您的索引數據量非常大,那么應當適當 考慮分割數據,在服務端采用多個庫來保存索引數據。您可以調用 XSSearch::addDb 添加 其它搜索庫。

關于超大數據量的多庫搜索及分布式設計,由于涉及的知識和范圍比較廣。我們提供了專門的商業支持方案, 在論壇中也會開辟專門的討論,在此略過不述。

$Id$

一條評論!

#21 報告
Jakin at 2013-02-18 11:13:59
請問改項目的SDK 是否無法運行在 win xp ?

如題

請到論壇 登錄 后刷新本頁面!

青海快三开奖走势图_