文檔說明

項目配置文件詳解

1. 基礎說明
  • 項目配置是一個 Xunsearch 項目的核心靈魂,非常重要,通常保存為 .ini 文件
  • 以分號開頭的行表示注釋,空行直接被忽略不起任何作用
  • 中括號包圍的每個分區均為字段配置,字段個數根據項目的實際需求設定
  • 每個項目必須有并且只能有一個類型類 ID 的主鍵字段,ID 字段值的字母不區分大小寫
2. 項目設置
  1. 項目名稱

    要求用純小寫字母和小劃線組成,長度控制在 2-31 個字符,這也是 xunsearch 服務器內用于保存索引數據的目錄名稱, 所以同一 xunsearch 服務器內的不同項目名稱不可重復。默認為不含后綴的配置文件名, 如:xyz.ini 則項目名默認為 xyz 。

    project.name = AppName
    
  2. 默認字符集

    這里的默認字符集范圍涵蓋服務端交互時的輸入數據、輸出數據,實際使用時索引文檔、 檢索服務器仍可重新指定字符集

    project.default_charset = UTF-8
    
  3. 服務器連接參數

    服務端連接參數的格式包含 3 種格式:

    1. 端口號(數字),連接 localhost 的該端口號 (例:8383)
    2. 地址:端口號,冒號連接地址(域名、IP地址)和端口 (例:127.0.0.1:8383)
    3. 文件路徑,本機的 unix socket 連接路徑 (例:/tmp/index.sock)
    ; 索引服務端配置,默認值為 8383
    server.index = 8383
    ; 搜索服務端配置,默認值為 8384
    server.search = 8384
    

    Note:1.4.7 起,服務端地址可以使用 ; 分隔指定多個。 索引更新將同步到所有服務端,而搜索則隨機從中挑選一個可用的服務端以達到均橫效果。

3. 項目字段設計

每個搜索項目均可以簡單地理解為單表檢索,凡是涉及關聯表的, 請將關聯記錄轉換為搜索項目的新字段并設置對應的分詞規則。字段設計很重要, 請仔細根據需求創建,字段名建議和您的實際數據庫字段一致。

  1. 定義字段

    每個字段用一個區段配置來表示,中括號內的名字即為字段名。每個項目包含若干個字段, 具體由項目搜索需求決定,并不需要一味的與實際源數據庫 (如 MYSQL) 一致, 而只需要設計搜索功能所涉及的字段即可。

    [field_name]
    
  2. 字段選項

    每個字段根據實際情況指定字段選項,所有選項均有默認值,所以即便不指定任何選項而只有中括號定義的字段, 那也是一個合法的字段,字段選項包括以下幾種:

    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 個字段。其中可以看到 tidfid 雖然從內容上講它們都是數字型,但沒有排序需求所以仍應為 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$

12條評論!

#109 報告
fa714142307 at 2017-07-05 11:49:45
怎么連接MySQL數據創建索引

怎么連接MySQL數據創建索引,文檔寫給自己看的吧,那么 難看懂

#85 報告
shyandsy at 2016-08-25 04:46:28
split怎么用

想用split以逗號切割文本,怎么寫? 文檔起碼給個用例吧

#66 報告
guojia at 2015-11-27 18:44:50
weight建立索引以后再改還有用么?

如題

#64 報告
ioriliao at 2015-11-27 14:08:58
連接的安全性怎么處理?

沒看到有像mysql這樣的數據字提供帳號密碼的連接?是否沒這樣的功能?謝謝!

#61 報告
farwish at 2015-09-09 15:15:25
字段選型:type = id,可以不一定是主鍵,只要是數字型,主要用來確保數據的唯一性

:如果不是主鍵,導入索引數據中間相當于還執行了group by id,以保證不重復。

#47 報告
yuanhu9 at 2014-12-02 15:19:51
寫的不清楚

開頭文檔寫的還行 到后面。太凌亂和簡單了

#36 報告
李liting at 2013-06-06 18:11:57
主鍵能不能支持數字

主鍵會將值存放為一個字符串,而我需要的是數字型,通過主鍵倒序時會有問題,比如716和6118,他會將716排在前面。

#35 報告
李liting at 2013-06-06 18:11:02
主鍵能不能支持數字

主鍵會將值存放為一個字符串,而我需要的是數字型,通過主鍵倒序時會有問題,比如716和6118,他會將716排在前面。

#34 報告
李liting at 2013-06-06 18:10:39
主鍵能不能支持數字

主鍵會將值存放為一個字符串,而我需要的是數字型,通過主鍵倒序時會有問題,比如716和6118,他會將716排在前面。

#33 報告
李liting at 2013-06-06 18:10:26
主鍵能不能支持數字

主鍵會將值存放為一個字符串,而我需要的是數字型,通過主鍵倒序時會有問題,比如716和6118,他會將716排在前面。

#30 報告
李liting at 2013-06-06 17:48:25
主鍵能不能支持數字

主鍵會將值存放為一個字符串,而我需要的是數字型,通過主鍵倒序時會有問題,比如716和6118,他會將716排在前面。

#16 報告
wjliuleidian at 2012-07-03 11:50:47
不懂

不懂不懂不懂

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

青海快三开奖走势图_ 浙江6 1开奖结果 贵州快三预测号码推荐 加拿大快乐8的来源 股票分析软件论坛 3d图谜总汇 股票分析 大数据 二码中特期期 上证指数走势图 2019低价龙头股 重庆百变王牌杀号技巧