xunsearch系列(二)使用篇

一、项目配置文件

基本说明:

1、项目配置是一个项目的核心灵魂,非常重要,通常保存为.ini文件,通常存储在/usr/local/xunsearch/sdk/php/app

2、以分号开头的行表示注释,空行直接被忽略不起任何作用

3、中括号包围的每个分区均为字段配置,字段个数根据自身项目的实际需求设定

4、每个项目必须有并且只能有一个类型为ID的主键字段,ID字段值得字母不区分大小写


ini文件中的常用配置:

名称:project.name = xxx

字符集:project.default_charset = utf-8(默认)

索引服务端口:server.index = 8383      (默认) 

搜索服务端口:server.search = 8384     (默认)


项目字段:

字段名:  [字段名]

字段类型:type = xxx


type字段类型:

主键型:id,确保每一条数据具备唯一性,是索引更新和删除的凭据,每个搜索项目必须有且仅有一个id字段,该字段的值不区分大小写 

字符型:string,适用多数情况,也是默认值

数值型:numeric,包含整型和浮点数,仅当字段需用于以排序或区间检索时才设为该类型,否则请使用string即可 

日期型:date,形式为 YYYYmmdd这样固定的8字节,如果没有区间检索或排序需求不建议使用 

标题型:title,标题或名称字段,至多有一个该类型的字段 

内容型:body,主内容字段,即本搜索项目中内容最长的字段,至多只有一个该类型字段,本字段不支持字段检索 


index 索引方式:

xunsearch的索引有2种模式:其一是不标明字段的检索,称之为“混合区检索”;其二是标明特定字段的“字段检索”。 例如:搜索 XXX YYY 表示在混合区检索,返回的结果可能是 title 也有可能是 body 字段符合匹配; 而搜索 title:XXX 则表示仅检索 title 匹配 XXX 的数据。每个字段可以指定的索引方式的值如下:

  • none 不做索引,所有的搜索匹配均与本字段无关,这个字段只用于排序或搜索结果展示用到。

  • self 字段索引,可以在搜索时用 field:XXX 来检索本字段

  • mixed 混合区索引,不标明字段的默认搜索也可以检索本字段

  • both 相当于 self + mixed,两种情况均索引

  • 通常情况默认值为 none ,但 id 型字段默认是 self ,title 型字段是 both ,body 型字段则固定为mixed 

index = none


看下安装完xunsearch后系统自动给我们生成的demo.ini配置文件中的内容截图如下:

11.png

仿照demo.ini来创建一个给博客用的项目配置文件 文件名:tp51_blog.ini  文件名自己随便起,只要后缀是.ini就行

tp51_blog.ini文件内容如下:

12.png

下面使用php来操作xunsearch就使用这个新创建的tp51_blog.ini项目


友情提醒:

如果你感觉ini文件中的内容写起来很麻烦的话,可以采用官方提供的在线ini文件设计辅助工具。 INI配置工具

二、xunsearch工具篇

安装完 完整版本(含SDK包)的xunsearch中在util目录下提供了一系列丰富的工具本来给你提供便捷操作。在本文中util所在的路径为:

/usr/local/xunsearch/sdk/php/util

util目录中共有如下几个文件:

20.png

我们只挑选Indexer.php以及Quest.php进行简单使用说明。(假设目前所在路径就是util目录中)


索引管理器(Indexer.php)

Indexer 作为索引管理工具,提供了批量索引导入、清空索引、刷新索引队列、日志等各项功能, 导入索引支持数据源包括:csv, json, 

mysql, sqlite 等,也可以自定义数据源。

运行脚本工具的 --help 选项可查看内置的帮助和说明,如乱码可在选项后加入 -c gbk 试试。


基本使用示例

1、#导入MySQL数据库的dbname.table_name表到test项目中
./Indexer.php  --source=mysql://root:pass@localhost/dbname --sql="SELECT id,title FROM table_name WHERE is_show = 1 AND is_del = 1" --project=test

用这个就可以导入数据到xunsearch,因为我们使用xunsearch的时候可能已经存在了大量数据。。更省事的往xunsearch里面灌数据
就是使用这个操作。。当然。。你也可以自己写脚本调用sdk提供的方法往xunsearch里面一条一条add数据。。不过这样。。你需要自己
写脚本。。对了,复制该条命令的时候别忘了把需要修改的地方换成你自己的。。

2、#查看test项目在服务端的相关信息
./Indexer.php --info -p test

3、#强制刷新test项目的搜索日志
./Indexer.php --flush-log --project test

4、#清空test项目的索引数据 
./Indexer.php --clean test

5、#查看Indexer.php工具的更多使用帮助说明
./Indexer.php --help

Indexer.php使用文档地址:http://www.xunsearch.com/doc/php/guide/util.indexer


搜索测试工具(Quest.php)

Quest 是搜索测试工具,提供了搜索相关的各项功能,非常适合用于前期测试比较和纠错。 运行脚本工具的--help选项可查看内置的帮助

和说明,如乱码可在选项后加入 -c gbk 试试。

该功能可以让你直接在服务端用命令行工具搜索数据,而不用需要自己写代码刷新浏览器来查看xunsearch中的数据。


基本使用示例

1、#搜索test中包含"测试"的数据
./Quest.php test 测试

2、#搜索test中包含"测试"的数据,并限制最多返回2条结果
./Quest.php -p test -q 测试 --limit=2

3、#列出test项目中以"x"开头的搜索建议
./Quest.php --suggest test x

4、#在test项目中修正搜索词"xm"
./Quest.php --correct test xm

5、#在test中列出和"测试"相关的搜索词
./Quest.php --related test 测试

6、#查看test项目上周的5条最热门搜索词
./Quest.php --hot=last --limit=5 test

7、#查看Quest.php工具的更多使用帮助说明
./Quest.php --help

Quest.php使用文档地址:http://www.xunsearch.com/doc/php/guide/util.quest

三、使用PHP来操作xunsearch

认识对象:

XS                   搜索项目总对象,所有相关操作均基于此对象及子方法。

XSDocument  搜索结果或索引文档,包括一组字段及值,相当于SQL表中的一条记录。

XSIndex          索引管理,通过XS对象的index属性或getIndex()方法获取。

XSSearch        搜索功能,通过XS对象的search属性或getSearch()方法获取。

XSException   异常类型,必须捕捉此异常以判断操作是否正确。


基本使用:

创建一个xunsearch.php文件,文件内的代码如下:

<?php

include_once '/usr/local/xunsearch/sdk/php/lib/XS.php'; //根据自己安装的xunsearch路径来修改为你自己的路径

try{

    //创建XS对象 只要是对索引操作 都必须使用XS对象
    $xs = new XS('tp51_blog'); //自动使用$prefix/sdk/php/apptp51_blog.ini作项目配置文件,在这里$prefix是/usr/local/xunsearch/
    
    //$xs = new XS('/path/to/tp51_blog.ini'); //使用/path/to/tp51_blog.ini
    
    //$xs一共有两个对象 一个是索引对象 一个是搜索对象
    //var_dump($xs);exit;

    //获取索引对象(用来增删改的)
    $index = $xs->index;


    //添加索引数据
    //$add_data = array('blog_id' => 1, 'title'   => 'php的自动加载');
    //$doc = new XSDocument($add_data);
    //$index->add($doc);


    //修改索引 根据主键id值修改 如果数据存在就更新
    //$edit_data = array('blog_id' => 1, 'title'   => 'php的自动加载哈哈修改测试嗯呢哦哦');
    //$doc2 = new XSDocument($edit_data);
    //$index->update($doc2);

    //删除 根据主键id删除,删除多个传递一位数组 数组中的每一个元素都是主键值
    //$index->del(1);

    /**
     * 索引注意点:
     * 索引更新是异步行为,有必要指出的是,出于性能优化设计,所有的索引操作(包含添加、删除、修改)均是异步的行为。
     也就是说在PHP-SDK的相关API返回后,只是说明已经将索引变动提交到操作队列中,而并不是已经立即更新到磁盘上的索引数据库文件。
     因此,搜索结果将不能立即体现出您的变动。但请放心,这个时间差我们已经控制在非常合理的范围内,通常是若干秒。
     */

    //同步索引 使用flushIndex()方法
    //$index->flushIndex();//强制刷新服务端的当前库的索引缓存,上面说了不会立即生效需要等待若干秒,可以使用此方法来加快索引同步速度,也是异步的形式,只不过是尽可能快的立即同步过去

    //清空索引
    //$index->clean(); //完全清空索引数据如果当前数据库处于重建过程中将禁止清空
    
    
    /****************伟大的分割线********************/


    //获取搜索对象(用来搜索的 即查询)
    $search = $xs->search;

    //搜索
    //$query_arr_object = $search->search('自动');        //包含:自动
    //$query_arr_object = $search->search('php 自动');    //包含:php 和 自动
    //$query_arr_object = $search->search('php OR 自动'); //包含:php 或 自动

    //var_dump($query_arr_object);exit; //结果是一个数组对象,如果没有搜索结果,则是一个空array
    
    //遍历数组对象获取结果
    foreach($query_arr_object  as $key => $val)
    {
        //var_dump($val->getFields());exit; //获取当前的数组值 output: array('blog_id' => 1,'title' => 'php的自动加载')
        
        //var_dump($val->f('blog_id'));exit; //获取当前blog_id字段的值 output: 1
    }



} catch(XSException $e) {

    //echo $e->getTraceAsString();
    exit('error');
}


更多使用方法请查阅指南或文档

xunsearch指南:xunsearch指南

xunsearchAPI:xunsearchAPI


好了。。就简单介绍到这里。。如果以后有海量的数据量的话,并且项目前台有搜索功能,完全可以用xunsearch来实现搜索,只不过是你后台添加、修改、删除一篇文章的时候,数据库的数据同步成功后,再次需要同步到xunsearch索引数据库里面,然后前台搜索的话直接从xunsearch里面搜索,不经过数据库搜索,这样也减轻了数据库的压力。。


提供一个chm版的xunsearch文档 xs_php_manual.chm



可参考如下网址:

https://blog.csdn.net/u010111874/article/details/77533661


声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与