[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 權威指南
1. [基礎說明](#)
1. [項目設置](#)
1. [項目字段設計](#)
1. [配置示例文件](#)
# 項目配置文件詳解
### 1. 基礎說明[?]()
- 項目配置是一個 `Xunsearch` 項目的核心靈魂,非常重要,通常保存為 .ini 文件
- 以分號開頭的行表示注釋,空行直接被忽略不起任何作用
- 中括號包圍的每個分區均為字段配置,字段個數根據項目的實際需求設定
- 每個項目必須有并且只能有一個類型類 ID 的主鍵字段,ID 字段值的字母不區分大小寫
### 2. 項目設置[?]()
1.
### 項目名稱
要求用純小寫字母和小劃線組成,長度控制在 2-31 個字符,這也是 xunsearch服務器內用于保存索引數據的*目錄名稱*, 所以同一 xunsearch 服務器內的不同項目名稱不可重復。默認為不含后綴的配置文件名,如:xyz.ini 則項目名默認為 `xyz` 。
~~~
project.name = AppName
~~~
1.
### 默認字符集
這里的默認字符集范圍涵蓋服務端交互時的輸入數據、輸出數據,實際使用時索引文檔、檢索服務器仍可重新指定字符集
~~~
project.default_charset = UTF-8
~~~
1.
### 服務器連接參數
服務端連接參數的格式包含 3 種格式:
1. *端口號(數字)*,連接 `localhost` 的該端口號 (例:`8383`)
1. *地址:端口號*,冒號連接地址(域名、IP地址)和端口 (例:`127.0.0.1:8383`)
1. *文件路徑*,本機的 `unix socket` 連接路徑 (例:`/tmp/index.sock`)
~~~
; 索引服務端配置,默認值為 8383
server.index = 8383
; 搜索服務端配置,默認值為 8384
server.search = 8384
~~~
> **Note:** 自 `1.4.7` 起,服務端地址可以使用 `;` 分隔指定多個。 索引更新將同步到所有服務端,而搜索則隨機從中挑選一個可用的服務端以達到均橫效果。
### 3. 項目字段設計[?]()
每個搜索項目均可以簡單地理解為單表檢索,凡是涉及關聯表的,請將關聯記錄轉換為搜索項目的新字段并設置對應的分詞規則。字段設計很重要,請仔細根據需求創建,字段名建議和您的實際數據庫字段一致。
1.
### 定義字段
每個字段用一個區段配置來表示,中括號內的名字即為字段名。每個項目包含若干個字段,具體由項目搜索需求決定,并不需要一味的與實際源數據庫 (如 `MYSQL`) 一致,而只需要設計搜索功能所涉及的字段即可。
~~~
[field_name]
~~~
1.
### 字段選項
每個字段根據實際情況指定字段選項,所有選項均有默認值,所以即便不指定任何選項而只有中括號定義的字段,那也是一個合法的字段,字段選項包括以下幾種:
#### type 字段類型
- string 字符型,適用多數情況,也是默認值
- numeric 數值型,包含整型和浮點數,僅當字段需用于以排序或區間檢索時才設為該類型,否則請使用 string 即可
- date 日期型,形式為 YYYYmmdd 這樣固定的 8 字節,如果沒有區間檢索或排序需求不建議使用
- id 主鍵型,確保每條數據具備唯一值,是索引更新和刪除的憑據,每個搜索項目必須有且僅有一個 id 字段,該字段的值不區分大小寫
- title 標題型,標題或名稱字段,至多有一個該類型的字段
- body 內容型,主內容字段, 即本搜索項目中內容最長的字段,至多只有一個該類型字段,本字段不支持字段檢索
~~~
type = string
~~~
#### index 索引方式
xunsearch 的索引有 2 種模式:其一是不標明字段的檢索,稱之為“混合區檢索”;其二是標明特定字段的“字段檢索”。例如:搜索 `XXX YYY` 表示在混合區檢索,返回的結果可能是 title 也有可能是 body 字段符合匹配;而搜索 `title:XXX` 則表示僅檢索 title 匹配 XXX 的數據。每個字段可以指定的索引方式的值如下:
- none 不做索引,所有的搜索匹配均與本字段無關,這個字段只用于排序或搜索結果展示用到。
- self 字段索引,可以在搜索時用 field:XXX 來檢索本字段
- mixed 混合區索引,不標明字段的默認搜索也可以檢索本字段
- both 相當于 self + mixed,兩種情況均索引
通常情況默認值為 none ,但 id 型字段默認是 self ,title 型字段是 both ,body 型字段則固定為 mixed 。
~~~
index = none
~~~
#### tokenizer 分詞器
默認為 default 采用內置的功能強大的 scws 分詞,適合絕大多數字符串字段。也可以指定自定義分詞器,格式為 name 或 name(arg) 兩種形式,其中 name 是分詞器名稱,arg 則是傳遞給分詞器構造函數的參數。自定義分詞器需要在 lib/ 目錄下編寫名為 XSTokenizerName 的分詞類并實現接口 XSTokenizer,內置支持的分詞器有以下幾種:
- full 表示本字段的值整體作為一個檢索詞,像各種 *ID* 都適合這種情況
- none 表示本字段沒有任何詞匯用于索引
- split([ ]) 表示根據參數分割內容,默認參數為空格,若參數以 / 開頭并以 / 結尾則 內部調用 `preg_split(arg, ..)` 來分割取詞,以支持正則或其它特殊字符分割
- xlen([2]) 表示根據指定參數長度分段取詞,如 ABCDEF => AB + CD + EF
- xstep([2]) 表示根據指定參數步長逐段取詞,如 ABCDEF => AB + ABCD + ABCDEF
- scws([3]) 表示采用指定參數為復合等級的 scws 分詞,(若無特殊復合需求,無需指定)
~~~
tokenizer = default
~~~
> **Note:** 小括號內的值表示參數,中括號表示省略后的默認值,實際編寫請勿照抄中括號!!!
#### cutlen 搜索結果摘要截取長度
默認值為 0 表示不截取。主要是針對某些內容特別長的字段在返回結果時自動剪取包含關鍵詞的一小段文字。典型的是 body 型字段默認為 300 。長度單位是字節,通常 UTF-8 編碼的一個漢字為 3 個字節。
~~~
cutlen = 0
~~~
#### weight 混合區檢索時的概率權重
在混合檢索時,可以對標題和內容等不同字段進行權重計算,如果你不想該字段參與計算權重可設為 0 。通常默認值為 1 ,但 title 型默認為 5 而 body 型則固定為 1 。
~~~
weight = 1
~~~
#### phrase 是否支持精確檢索
即當給搜索語句加上引號時,則要求匹配的結果必須嚴格按照搜索詞的順序匹配,此外還支持用 NEAR 之類的語法來做精確檢索,具體參見:[搜索技巧](#) 。通常默認值為 no 但是 title 和 body 型字段默認則為 yes 。值得注意的是該功能僅支持默認分詞器,如非必要請勿開啟此項,因為這會增加索引數據的大小。
~~~
phrase = no
~~~
#### non_bool 強制指定是否為布爾索引
布爾索引不參與權重排名計算,默認情況下所有自定義分詞器的字段均為布爾索引。因此,當您使用自定義分詞器卻又想讓本字段參與權重計算的話,請將本項設為 yes。
~~~
non_bool = yes
~~~
### 4. 配置示例文件[?]()
下面是 discuz 搜索項目的配置示范文件,包含 12 個字段。其中可以看到 `tid` 和 `fid` 雖然從內容上講它們都是數字型,但沒有排序需求所以仍應為 `string` 類型,而 `dateline` 由于有排序需求,所以必須指定為 `numeric` 類型。
~~~
project.name = sample
project.default_charset = GBK
;server.index = 8383
;server.search = 8384
[pid]
type = id
[subject]
type = title
[message]
type = body
[dateline]
type = numeric
[author]
index = both
[authorid]
[tid]
index = self
tokenizer = full
[fid]
index = self
tokenizer = full
[flag]
~~~
$Id$
[? XSTokenizer 分詞接口](#)
[自定義分詞器 ?](#)
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 授權許可證