文檔說明

索引概述

1. 什么是索引?

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

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

$prefix/data/demo

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

  • db 默認的主索引數據庫,各種檢索數據均存放在此
  • log_db 搜索日志數據庫,用于存放搜索日志相關,用于實現相關搜索、搜索建議、拼音搜索等
2. 如何開始使用索引?

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

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

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

3. 如何更換索引庫?

默認使用的索引庫名稱為 db,對應到服務端的 $prefix/data/$name/db,一般開發時不需要 關注這個本質。但如果您的索引數據庫相當大,希望對索引庫進行適當的分割,可以自命名新的索引庫。 在搜索時可以使用 XSSearch::addDb 進行多庫并行搜索。

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

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

但請放心,這個時間差我們已經控制在非常合理的范圍內,通常是若干秒。

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

$Id$

3條評論!

#100 報告
phpxiebin at 2017-03-03 10:35:04
關于異步數據問題,可以修改為即時同步,處理方式如下:

例如可以將$index->add($doc);改為$index->add($doc)->flushIndex()即可

#88 報告
風見雨下 at 2016-09-07 11:38:25
可以把不同的項目合并么

能不能合并項目或者將索引合并搜索?我想將四張沒有關系的表聯合搜索出結果,求解啊

#10 報告
Dull at 2012-04-10 00:37:44
索引庫指的是單一項目內部的,而非不同項目的
如項目$db = 'demo';
預定義索引庫為 $dbs = array('db1','db2','db3','db4','db5');

添加數據可這樣操作:
$xs = new XS($db);
$doc = new XSDocument;
$index = $xs->index;
$index->setDb($dbs[(mt_rand(0,4))]);
...

搜索這樣操作:
$xs = new XS($db);
$search = $xs->search;
foreach($dbs as $tdb) $search->addDb($tdb);
$total = $search->getDbTotal();

這樣子在data目錄下會形成這樣的數據結構:
data/demo/
          db1/
          db3/
          ...

按照更新日志,從1.1開始會自動分庫 因此是否有必要手動分庫尚需進一步測試

開始理解有誤 以為是不同項目的 感謝hightman

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

青海快三开奖走势图_ 31选7今晚开奖结果福建 广东快乐10分app下载 赛车pk10app 北京快中彩开奖记录 辽宁35选7计划 江西多乐彩前三直选开奖 宁夏11选5前三直选走势图 北京快乐8开奖历史 广西快三 和值计划 内蒙古快三走势图今天