Xunsearch PHP-SDK v1.4.9 权威指南

# 索引概述

## 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$
« 编写第一个配置文件
添加文档 »
Copyright © 2008-2011 by 杭州云圣网络科技有限公司
All Rights Reserved.