項(xiàng)目配置文件詳解

2019-08-14 13:59 更新
1. 基礎(chǔ)說明
  • 項(xiàng)目配置是一個(gè) Xunsearch 項(xiàng)目的核心靈魂,非常重要,通常保存為 .ini 文件

  • 以分號(hào)開頭的行表示注釋,空行直接被忽略不起任何作用

  • 中括號(hào)包圍的每個(gè)分區(qū)均為字段配置,字段個(gè)數(shù)根據(jù)項(xiàng)目的實(shí)際需求設(shè)定

  • 每個(gè)項(xiàng)目必須有并且只能有一個(gè)類型類 ID 的主鍵字段,ID 字段值的字母不區(qū)分大小寫

2. 項(xiàng)目設(shè)置
  1. 項(xiàng)目名稱

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

    project.name = AppName
  2. 默認(rèn)字符集

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

    project.default_charset = UTF-8
  3. 服務(wù)器連接參數(shù)

    服務(wù)端連接參數(shù)的格式包含 3 種格式:

    ; 索引服務(wù)端配置,默認(rèn)值為 8383
    server.index = 8383
    ; 搜索服務(wù)端配置,默認(rèn)值為 8384
    server.search = 8384

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

    1. 端口號(hào)(數(shù)字),連接 localhost 的該端口號(hào) (例:8383)

    2. 地址:端口號(hào),冒號(hào)連接地址(域名、IP地址)和端口 (例:127.0.0.1:8383)

    3. 文件路徑,本機(jī)的 unix socket 連接路徑 (例:/tmp/index.sock)

3. 項(xiàng)目字段設(shè)計(jì)

每個(gè)搜索項(xiàng)目均可以簡單地理解為單表檢索,凡是涉及關(guān)聯(lián)表的, 請將關(guān)聯(lián)記錄轉(zhuǎn)換為搜索項(xiàng)目的新字段并設(shè)置對應(yīng)的分詞規(guī)則。字段設(shè)計(jì)很重要, 請仔細(xì)根據(jù)需求創(chuàng)建,字段名建議和您的實(shí)際數(shù)據(jù)庫字段一致。

  1. 定義字段

    每個(gè)字段用一個(gè)區(qū)段配置來表示,中括號(hào)內(nèi)的名字即為字段名。每個(gè)項(xiàng)目包含若干個(gè)字段, 具體由項(xiàng)目搜索需求決定,并不需要一味的與實(shí)際源數(shù)據(jù)庫 (如 MYSQL) 一致, 而只需要設(shè)計(jì)搜索功能所涉及的字段即可。

    [field_name]
  2. 字段選項(xiàng)

    每個(gè)字段根據(jù)實(shí)際情況指定字段選項(xiàng),所有選項(xiàng)均有默認(rèn)值,所以即便不指定任何選項(xiàng)而只有中括號(hào)定義的字段, 那也是一個(gè)合法的字段,字段選項(xiàng)包括以下幾種:

    type 字段類型

    type = string

    index 索引方式

    xunsearch 的索引有 2 種模式:其一是不標(biāo)明字段的檢索,稱之為“混合區(qū)檢索”;其二是標(biāo)明特定字段的“字段檢索”。 例如:搜索 XXX YYY 表示在混合區(qū)檢索,返回的結(jié)果可能是 title 也有可能是 body 字段符合匹配; 而搜索 title:XXX 則表示僅檢索 title 匹配 XXX 的數(shù)據(jù)。每個(gè)字段可以指定的索引方式的值如下:

    通常情況默認(rèn)值為 none ,但 id 型字段默認(rèn)是 self ,title 型字段是 both ,body 型字段則固定為 mixed 。

    index = none

    tokenizer 分詞器

    默認(rèn)為 default 采用內(nèi)置的功能強(qiáng)大的 scws 分詞,適合絕大多數(shù)字符串字段。也可以指定自定義分詞器, 格式為 name 或 name(arg) 兩種形式,其中 name 是分詞器名稱,arg 則是傳遞給分詞器構(gòu)造函數(shù)的參數(shù)。 自定義分詞器需要在 lib/ 目錄下編寫名為 XSTokenizerName 的分詞類并實(shí)現(xiàn)接口 XSTokenizer, 內(nèi)置支持的分詞器有以下幾種:

    tokenizer = default

    Note: 小括號(hào)內(nèi)的值表示參數(shù),中括號(hào)表示省略后的默認(rèn)值,實(shí)際編寫請勿照抄中括號(hào)!?。?/p>

    cutlen 搜索結(jié)果摘要截取長度

    默認(rèn)值為 0 表示不截取。主要是針對某些內(nèi)容特別長的字段在返回結(jié)果時(shí)自動(dòng)剪取包含關(guān)鍵詞的一小段文字。 典型的是 body 型字段默認(rèn)為 300 。長度單位是字節(jié),通常 UTF-8 編碼的一個(gè)漢字為 3 個(gè)字節(jié)。

    cutlen = 0

    weight 混合區(qū)檢索時(shí)的概率權(quán)重

    在混合檢索時(shí),可以對標(biāo)題和內(nèi)容等不同字段進(jìn)行權(quán)重計(jì)算,如果你不想該字段參與計(jì)算權(quán)重可設(shè)為 0 。 通常默認(rèn)值為 1 ,但 title 型默認(rèn)為 5 而 body 型則固定為 1 。

    weight = 1

    phrase 是否支持精確檢索

    即當(dāng)給搜索語句加上引號(hào)時(shí),則要求匹配的結(jié)果必須嚴(yán)格按照搜索詞的順序匹配,此外還支持用 NEAR 之類的語法來做精確檢索,具體參見:搜索技巧 。通常默認(rèn)值為 no 但是 title 和 body 型字段默認(rèn)則為 yes 。值得注意的是該功能僅支持默認(rèn)分詞器,如非必要請勿開啟此項(xiàng), 因?yàn)檫@會(huì)增加索引數(shù)據(jù)的大小。

    phrase = no

    non_bool 強(qiáng)制指定是否為布爾索引

    布爾索引不參與權(quán)重排名計(jì)算,默認(rèn)情況下所有自定義分詞器的字段均為布爾索引。因此, 當(dāng)您使用自定義分詞器卻又想讓本字段參與權(quán)重計(jì)算的話,請將本項(xiàng)設(shè)為 yes。

    non_bool = yes
    • full 表示本字段的值整體作為一個(gè)檢索詞,像各種 ID 都適合這種情況

    • none 表示本字段沒有任何詞匯用于索引

    • split([ ]) 表示根據(jù)參數(shù)分割內(nèi)容,默認(rèn)參數(shù)為空格,若參數(shù)以 / 開頭并以 / 結(jié)尾則 內(nèi)部調(diào)用preg_split(arg, ..) 來分割取詞,以支持正則或其它特殊字符分割

    • xlen([2]) 表示根據(jù)指定參數(shù)長度分段取詞,如 ABCDEF => AB + CD + EF

    • xstep([2]) 表示根據(jù)指定參數(shù)步長逐段取詞,如 ABCDEF => AB + ABCD + ABCDEF

    • scws([3]) 表示采用指定參數(shù)為復(fù)合等級(jí)的 scws 分詞,(若無特殊復(fù)合需求,無需指定)

    • none 不做索引,所有的搜索匹配均與本字段無關(guān),這個(gè)字段只用于排序或搜索結(jié)果展示用到。

    • self 字段索引,可以在搜索時(shí)用 field:XXX 來檢索本字段

    • mixed 混合區(qū)索引,不標(biāo)明字段的默認(rèn)搜索也可以檢索本字段

    • both 相當(dāng)于 self + mixed,兩種情況均索引

    • string 字符型,適用多數(shù)情況,也是默認(rèn)值

    • numeric 數(shù)值型,包含整型和浮點(diǎn)數(shù),僅當(dāng)字段需用于以排序或區(qū)間檢索時(shí)才設(shè)為該類型,否則請使用 string 即可

    • date 日期型,形式為 YYYYmmdd 這樣固定的 8 字節(jié),如果沒有區(qū)間檢索或排序需求不建議使用

    • id 主鍵型,確保每條數(shù)據(jù)具備唯一值,是索引更新和刪除的憑據(jù),每個(gè)搜索項(xiàng)目必須有且僅有一個(gè) id 字段,該字段的值不區(qū)分大小寫

    • title 標(biāo)題型,標(biāo)題或名稱字段,至多有一個(gè)該類型的字段

    • body 內(nèi)容型,主內(nèi)容字段, 即本搜索項(xiàng)目中內(nèi)容最長的字段,至多只有一個(gè)該類型字段,本字段不支持字段檢索

4. 配置示例文件

下面是 discuz 搜索項(xiàng)目的配置示范文件,包含 12 個(gè)字段。其中可以看到 tid 和 fid 雖然從內(nèi)容上講它們都是數(shù)字型,但沒有排序需求所以仍應(yīng)為 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]


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)