[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 權威指南
1. [如何開始使用搜索?](#)
1. [典型搜索做法](#)
1. [關于快捷搜索](#)
1. [搜索中的串接操作](#)
1. [搜索日志](#)
1. [如何進行多庫搜索?](#)
# 搜索概述
在索引庫建立完成后,現在開始學習使用搜索功能,這也是最核心的部分。
### 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::count](#) 和 [XSSSearch::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$
[? 自定義SCWS詞庫](#)
[構建搜索語句 ?](#)
Copyright ? 2008-2011 by [杭州云圣網絡科技有限公司](http://www.xunsearch.com)
All Rights Reserved.



- 權威指南
- 新手上路
- 最新主要變動
- 概述
- 關于 Xunsearch PHP-SDK
- 安裝、升級
- 體驗 demo 項目
- 開發規范
- 開發流程
- 了解基礎對象
- 基礎對象概述
- XS 項目
- XSException 異常
- XSDocument 文檔
- XSIndex 索引管理
- XSSearch 搜索
- XSTokenizer 分詞接口
- 編寫項目配置文件
- 項目配置詳解
- 自定義分詞器
- 編寫第一個配置文件
- 管理索引
- 索引概述
- 添加文檔
- 更新、修改文檔
- 刪除文檔
- 清空索引
- 平滑重建索引
- 使用索引緩沖區
- 自定義SCWS詞庫
- 使用搜索
- 搜索概述
- 構建搜索語句
- 獲取搜索匹配結果
- 獲取搜索匹配數量
- 獲取熱門搜索詞
- 獲取相關搜索詞
- 搜索建議和糾錯
- 按字段值分面搜索
- 使用輔助工具
- RequiredCheck 運行檢測
- Indexer 索引管理器
- Quest 搜索測試工具
- SearchSkel 生成搜索代碼
- IniWizzard 配置文件向導
- Logger 搜索日志管理
- 專題
- 同義詞搜索功能
- 在SDK中使用SCWS分詞
- API 指南
- XS
- XS
- XSCommand
- XSComponent
- XSDocument
- XSErrorException
- XSException
- XSFieldMeta
- XSFieldScheme
- XSIndex
- XSSearch
- XSServer
- XS.tokenizer
- XSTokenizer
- XSTokenizerFull
- XSTokenizerNone
- XSTokenizerScws
- XSTokenizerSplit
- XSTokenizerXlen
- XSTokenizerXstep
- XS.util
- XSCsvDataSource
- XSDataFilter
- XSDatabaseDataSource
- XSDebugFilter
- XSJsonDataSource
- XSUtil
- XS.util.db
- XSDatabase
- XSDatabaseMySQL
- XSDatabaseMySQLI
- XSDatabasePDO
- XSDatabasePDO_MySQL
- XSDatabasePDO_PgSQL
- XSDatabasePDO_SQLite
- XSDatabasePgSQL
- XSDatabaseSQLite
- XSDatabaseSQLite3
- XS.utilf
- XSDataSource
- 其它文檔
- 關于 xunsearch
- 特色和優勢
- Xunsearch 架構簡圖
- 下載 Xunsearch
- 商業服務與支持
- XunSearch 授權許可證