索引概述

2019-08-14 14:00 更新

1. 什么是索引?

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

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

$prefix/data/demo

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

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

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

2. 如何開始使用索引?

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

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

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

3. 如何更換索引庫?

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

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

4. 索引更新是異步行為

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

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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號