使用迅搜xunsearch给我的博客加上中文全文搜索(二)

本文只阐述迅搜在我的博客中的应用,以作抛砖引玉。

迅搜xunsearch做全文检索是用的索引服务器和搜索服务器两个服务来做的。

  1. 索引服务器,资料通过索引服务建立索引库以备查询使用。
  2. 搜索服务器,搜索时通过本服务提供的接口返回数据。

迅搜中每个查询项目对应一个配置文件,/usr/local/xunsearch/data下会创建一个以项目名命名的文件夹,存放索引数据库。

编写配制文件 官方手册 已经介绍的比较清晰了。

project.name = article
project.default_charset = UTF-8

[id]
type = id

[title]
type = title

[content]
type = body
cutlen = 300
tokenizer = scws([3])

[create_time]
tokenizer = full
weight = 0

[state]
type = numeric
index = self
tokenizer = full

搜索项目实例化

    $ini = env('app_path').'/common/lib/xunsearch/article.ini',
    $xs = new \XS($ini);    // 项目实例

创建索引需要索引文档,此文档对象和搜索结果的文档对象并不是同一个。

    $docData = [
        'id'=>$data['id'],
        'title'=>$data['title'],
        'content'=>strip_tags($data['content']),
        'create_time'=>$data['create_time'],
        'state'=>1,
    ];
    // 实例化文档对象并赋值。
    $doc = new \XSDocument();
    $doc->setFields($docData);

索引对象是迅搜项目对象上的一个属性

    $xs->index

向索引库中增加文档,需要注意的是相同的数据,可以多次添加,并且不报错……

    $xs->index->add($doc);

索引库中更新文档 需要注意的是 这里不能只更新变化的字段,而是所有字段都要向文档对象赋值,就像新增对象一样。

    $xs->index->update($doc);

索引中删除文档对象

    $xs->index->del(explode(',',$ids));

至此索引库中的增删改查都有了 就这么简单。

然后是搜索功能

说起来更加简单。

    $docs = $xs->search->setQuery($keyword." AND state:1")
                ->setLimit($per_page,$offset)
                ->setFuzzy(true)
                ->search();
    $count = $xs->search->getLastCount();

通过关键词只搜索启用的文章。 自行实现分页代码

评论

captcha