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