[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 權威指南
1. [搜索結果文檔](#)
1. [索引文檔](#)
# XSDocument 文檔
[XSDocument](#) 是用于描述檢索/索引的基礎對象,包含一組字段及其值。相當于常規 `SQL` 數據表中的一行記錄。通過魔術方法,每個字段名都是文檔的虛擬屬性,可直接賦值或取值,也支持數組下標方式訪問文檔字段。
~~~
$doc = new XSDocument;
$doc->name = 'value'; // 用對象屬性方式進行賦值、取值
$doc['name'] = 'value'; // 用數組下標方式進行賦值、取值
$value = $doc->f('name'); // 用函數方式進行取值
$doc->setField('name', 'value'); // 用函數方式進行賦值
$doc->setFields(array('name' => 'value', 'name2' => 'value2')); // 用數組進行批量賦值
// 迭代方式取所有字段值
foreach($doc as $name => $value)
{
echo "$name: $value\n";
}
~~~
用于索引更新的文檔對象和搜索結果返回中略有不同,下面分開講解。
### 1. 搜索結果文檔[?]()
搜索結果文檔是指 [XSSearch::search](#) 返回值包含的文檔,它由 `PHP-SDK` 內部代碼創建。除了普通文檔的功能外,還支持以下魔術方法來訪問搜索結果的元數據:
- `docid()` 取得搜索結果文檔的 docid 值 (實際數據庫內的 id,一般用不到)
- `rank()` 取得搜索結果文檔的序號值 (第X條結果)
- `percent()` 取得搜索結果文檔的匹配百分比 (結果匹配度, 1~100)
- `weight()` 取得搜索結果文檔的權重值 (浮點數)
- `ccount()` 取得搜索結果折疊的數量 (按字段折疊搜索時才有效)
訪問結果文檔的字符集默認是與 [XSSearch::setCharset](#) 所指定的字符集一致的,如未指定過則為 [XS::defaultCharset](#)。雖然您可以通過 [XSDocument::setCharset](#) 來強制修改文檔的字符集,但不推薦這樣做,也沒必要這樣做。
### 2. 索引文檔[?]()
索引文檔是指由用戶創建,并用于提交更新到索引庫中的文檔,創建文檔時允許傳入字符集作為構造函數的參數,如未傳入,則自動視為項目的默認字符集 [XS::defaultCharset](#),如果字符集不是 `UTF-8` 的系統內部會自動進行轉換,但要求 `PHP` 帶有中文轉碼擴展 ([iconv](http://php.net/manual/en/book.iconv.php) 或 [mbstring](http://php.net/manual/en/book.mbstring.php))
~~~
$doc = new XSDocument; // 使用默認字符集
$doc = new XSDocument('gbk'); // 指定文檔為 GBK 編碼
$doc = new XSDocument($data); // 數組 $data 為初始字段數據, 編碼則為默認編碼
$doc = new XSDocument($data, 'gbk'); // 數組 $data 為字段數據, 編碼為 GBK
// 然后進行一系列賦值操作
// 提交到索引中
$xs->index->add($doc);
~~~
如果您希望在 `XSDocument` 提交到索引前、后進行一系列必要的操作,您可以對 `XSDocument` 進行擴展,重寫 [XSDocument::beforeSubmit](#) 和 [XSDocument::afterSubmit](#) 方法來實現,比如擴展代碼為`$prefix/sdk/php/lib/MyDocument.class.php`。
~~~
class MyDocument extends XSDocument
{
public function beforeSubmit(XSIndex $index)
{
// 在此編寫您的代碼,如需要中斷添加請提前返回 false
// ...
return parent::beforeSubmit($index);
}
public function afterSubmit(XSIndex $index)
{
// 在此編寫您的代碼,只有加入索引成功后才會執行
// ...
}
}
$doc = new MyDocument('gbk');
$doc->pid = 123;
$doc->subject = 'Hello, 測試';
$doc->message = '測試的內容在此';
$xs->index->add($doc);
~~~
$Id$
[? XSException 異常](#)
[XSIndex 索引管理 ?](#)
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 授權許可證