索引概述

2019-08-14 14:00 更新

1. 什么是索引?

索引在 Xunsearch 中泛指用于檢索的數(shù)據(jù)庫文件總稱。每一次檢索數(shù)據(jù)均為訪問和讀取 索引文件,每一次更新數(shù)據(jù)則是對(duì)索引文件的修改。

Xunsearch 每個(gè)搜索項(xiàng)目的索引數(shù)據(jù)是分開單獨(dú)存放的,索引本質(zhì)上是一系列預(yù)設(shè)計(jì)文件, 內(nèi)部都是特別設(shè)計(jì)的 Tree 結(jié)構(gòu),但這些東西不是這份指南所關(guān)注的。假設(shè)一個(gè)項(xiàng)目的名稱 為 demo (即 INI 文件中 project.name 的值),那么它在服務(wù)端的索引數(shù)據(jù)的存儲(chǔ) 路徑為:

$prefix/data/demo

該目錄底下包含 2 個(gè)主要索引數(shù)據(jù)庫,分別是

  • db 默認(rèn)的主索引數(shù)據(jù)庫,各種檢索數(shù)據(jù)均存放在此

  • log_db 搜索日志數(shù)據(jù)庫,用于存放搜索日志相關(guān),用于實(shí)現(xiàn)相關(guān)搜索、搜索建議、拼音搜索等

2. 如何開始使用索引?

在 PHP-SDK 中,索引管理由類型為 XSIndex 的對(duì)象所維護(hù)。在 XS 項(xiàng)目中,通過讀取 XS::index 屬性來獲取索引管理對(duì)象,然后展開各種操作,而不是自行創(chuàng)建對(duì)象。后面章節(jié)中 的相關(guān)測(cè)試代碼如果沒有特別編寫,其中的$index 均為通過類似以下的方式獲取的索引對(duì)象:

require '$prefix/sdk/php/lib/XS.php';$xs = new XS('demo'); // 建立 XS 對(duì)象,項(xiàng)目名稱為:demo$index = $xs->index; // 獲取 索引對(duì)象

索引的維護(hù)包括數(shù)據(jù)修改/更新、數(shù)據(jù)刪除、添加數(shù)據(jù)等操作,由后面的篇幅分開詳細(xì)講解。

3. 如何更換索引庫?

默認(rèn)使用的索引庫名稱為 db,對(duì)應(yīng)到服務(wù)端的 $prefix/data/$name/db,一般開發(fā)時(shí)不需要 關(guān)注這個(gè)本質(zhì)。但如果您的索引數(shù)據(jù)庫相當(dāng)大,希望對(duì)索引庫進(jìn)行適當(dāng)?shù)姆指睿梢宰悦碌乃饕龓臁?在搜索時(shí)可以使用XSSearch::addDb 進(jìn)行多庫并行搜索。

// 比如把當(dāng)前索引更新到名稱為 db2 的庫中$index->setDb('db2'); 
// 在檢索時(shí)同時(shí)搜索 db, db2 的作法,具體參考搜索的有關(guān)章節(jié)...$search->addDb('db2')->setQuery(...)->search();

4. 索引更新是異步行為

有必要指出的是,出于性能優(yōu)化設(shè)計(jì),所有的索引操作(包含添加、刪除、修改文檔)均是異步的 行為。也就是說在 PHP-SDK 的相關(guān) API 返回后,只是說明已經(jīng)將索引變動(dòng)提交到操作隊(duì)列中, 而并不是已經(jīng)立即更新到磁盤上的索引數(shù)據(jù)庫文件。因此,搜索結(jié)果將不能立即體現(xiàn)出您的變動(dòng)。

但請(qǐng)放心,這個(gè)時(shí)間差我們已經(jīng)控制在非常合理的范圍內(nèi),通常是若干秒。

Note: 特別說明,索引清空是同步操作,立即生效。如果確實(shí)有必要,您可以以使用 Indexer的 --flush 選項(xiàng)來強(qiáng)制刷新索引。


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)