• Xunsearch迅搜(基于 xapian+scws 的开源中文搜索引擎)安装与简单使用


      今天鼓捣了xunsearch,感觉官方指南写得挺详细,于是按照指南一步一步走,但是感觉越看越凌乱,像看API一样,新手看得特费劲,网上也少有新手教程,于是略过今天的歪路,记录一下我的安装步骤。

      Xunsearch PHP-SDK 是与 xunsearch 后端服务协同工作的,所以后先必须先在您的服务器 上安装服务端,服务器操作系统要求必须是 LinuxBSD 或其它类 UNIX 系统,同时安装了 gccmake 等基础编译环境。[官文]

     一,软件准备

      PHP5.2.0以上,php已经配置到linux环境变量。

     二,傻瓜式安装

    #获取
    wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
    #解压
    tar -xjf xunsearch-full-latest.tar.bz2
    #安装
    cd xunsearch-full-1.4.9/
    sh setup.sh

      接下来提示确认安装目录,默认/usr/local/xunsearch,直接回车确认,y,一个泡面的时间安装完成。

      安装完成后,启动/重启xunsearch后台服务,并建议将下面命令添加到 /etc/rc.local 开机脚本中。

    /usr/local/xunsearch/bin/xs-ctl.sh start

       搜索系统将所有数据保存在 xunsearch安装目录/data 目录中。 如果您希望数据目录另行安排或转移至其它分区,请将 xunsearch安装目录/data 作为软链接指向真实目录

     安装 PHP-SDK:

      PHP-SDK 的代码不需要另行下载,已经包含在 xunsearch 的安装结果中了,在此假设您将 xunsearch 安装在$prefix 目录,那么 $prefix/sdk/php 即是 PHP-SDK 的代码目录。目录结构及功能逻列如下:

    _
    |- doc/                    离线 HTML 版相关文档
    |- app/                    用于存放搜索项目的 ini 文件
    |- lib/XS.php              入口文件,所有搜索功能必须且只需包含此文件    
    - util/                   辅助工具程序目录
        |- RequireCheck.php    用于检测您的 PHP 环境是否符合运行条件
        |- IniWizzaard.php     用于帮助您编写 xunsearch 项目配置文件
        |- Quest.php           搜索测试工具
        - Indexer.php         索引管理工具

      如果您的搜索应用程序和 xunsearch 在同一台服务器,则无需复制任何代码,在开发的时候直接包含 入口文件$prefix/sdk/php/lib/XS.php 即可。代码如下:

    require_once '$prefix/sdk/php/lib/XS.php';

      

      shell测试xunsearch的php运行环境,运行后会出现配置提示:

    #如果php没有配置到linux环境变量
    /path-to-php/bin/php /usr/local/xunsearch/sdk/php/util/RequiredCheck.php
    
    #已经配置过php环境变量
    /usr/local/xunsearch/sdk/php/util/RequiredCheck.php

      Δ想在shell下测试体验xunsearh的搜索,可以点击体验demo项目

     三,简单使用xunsearch

      首先理清xunsearch的使用流程:

    1. 配置项目ini(一个sql表对应一个搜索项目ini)
    2. 使用Indexer索引管理(shell方式连接数据库表,建立索引)
    3. 使用XSsearch搜索对象(在项目中搜索已经建立索引的表,取出数据)

      

      为了方便调试,我这里将整个php-sdk目录复制到本地服务器根目录下,我使用的是(nginx 默认html目录)

    cp -R /usr/local/xunsearch/sdk/php /path-to-nginx/html/

       至此,我使用PHP-SDK作为php-sdk所在的目录。

      下面以一个小例子简单讲解。

      项目要求:新闻搜索,可以添加文章,可以根据关键字搜索。

      使用mysql,test_xs数据库,表名news,字段如下:

    +---------+------------------+------+-----+---------+----------------+
    | Field   | Type             | Null | Key | Default | Extra          |
    +---------+------------------+------+-----+---------+----------------+
    | id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | title   | varchar(20)      | NO   |     |         |                |
    | content | varchar(200)     | NO   |     |         |                |
    | addtime | int(10) unsigned | YES  |     | 0       |                |
    +---------+------------------+------+-----+---------+----------------+

    #此处先导入测试数据
    mysql> insert into news (title,content,addtime) values('第一个新闻','今天天气非常好,适合搞搜索',unix_timestamp(now())),('第二个新闻','据新华社今天报道,xunsearch搜索引擎很强大非常好',unix_timestamp(now())),('第三个新闻','天文台预测,今天将启动新一轮的降雨',unix_timestamp(now()));

      

      1,配置项目ini

        项目配置ini位于 PHP-SDK/sdk/php/app目录下,xunsearch给了一个demo项目的配置:demo.ini,你可以打开参考其写法,具体配置的详细,你可以点此到官网查看,有例子讲解,这里不累叙,官网还提供了ini配置在线编写器,非常方便。

        我这里简单写了一份:news.ini

    project.name = news
    
    [id]
    type = id
    tokenizer = full
    
    [title]
    type = title
    
    [content]
    type = body
    
    [addtime]
    type = numeric
    View Code

     

      2,使用Indexer索引管理器

        每一个项目配置ini配置对应数据库中的一个表,作为一个全文检索工具,必须首先建立索引。Xunsearch提供了使用php编写的Indexer索引管理工具,位于PHP-SDK/util/Indexer.php,提供了(shell下)批量索引导入、清空索引、刷新索引队列、日志等各项功能,具体语法可以点此到官网查看

      此处作为连接数据库,导入索引用。由于我是pdo方式连接mysql,因此写法比较特殊:

    PHP-SDK/util/Indexer.php --source=pdo.MySQL://root:123@localhost/test_xs --sql="select * from news" --project=news

        将会提示:

    初始化数据源 ... pdo.MySQL://root:123@localhost/test_xs 
    开始批量导入数据 (请直接输入数据) ...
    完成索引导入:成功 3 条,失败 0 条
    刷新索引提交 ...

      索引建立后,可以先用Quest搜索工具测试索引是否建立成功,位于PHP-SDK/util/Quest.php,Quest具体语法点此官网查看

      这里小测一个 PHP-SDK/util/Quest.php news 非常好

    在 3 条数据中,大约有 2 条包含 非常好 ,第 1-2 条,用时:0.1118 秒。
    
    1. 第一个新闻 #1# [100%,0.55]
    今天天气非常好,适合搞搜索 
    Addtime:1461037973
    
    2. 第二个新闻 #2# [90%,0.50]
    据新华社今天报道,xunsearch搜索引擎很强大非常好 
    Addtime:1461037973
    

      可见,项目配置news.ini中有提及的字段,搜索结果都展示出来了。

      3,使用XSSearch搜索对象

      关于XS的基础对象,可以点此到官网查看,此处极其简单的新闻添加,搜索页。

      1,newsget.php 在浏览器上输入 XXX/newsget.php?key=关键字 搜索查看

     1 <?php
     2 /*
     3 newsget.php
     4 usage:newsget.php?key=keyword
     5 */
     6 
     7 $key=trim($_GET['key']);
     8 require 'php/lib/XS.php';
     9 try
    10 {
    11     $xs = new XS('news'); //实例化XS对象
    12     $search=$xs->search;  //获取XSSearch搜索对象,了解跟多,点此到官网查看
    13     $docs=$search->search($key); //通过XSsearch获取XSDocment文档对象
    14     foreach ($docs as $doc) //循环获取文档内容,获取更多XSDocument文档内容,点此到官网查看
    15     {
    16        echo '第'.$doc->rank().'条结果 , 匹配度[' . $doc->percent() . "%]
    <br/>";
    17        echo 'id:'.$doc->docid().',标题:'.$doc->title.', 搜索内容:'.$doc->content . "
    <br/>"; //使用类似php __get的方式获取文档的字段内容
    18        echo '<br/>';
    19     }
    20 }
    21 catch (XSException $e)
    22 {
    23     echo $e;               // 直接输出异常描述
    24     if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
    25         echo "
    " . $e->getTraceAsString() . "
    ";
    26 }

      

      2,newsadd.php 在浏览器上输入XXX/newsadd.php?title=标题&&content=内容 添加内容到数据库和更新到索引中

     1 <?php
     2 /*
     3 newsadd.php
     4 usage:newsadd.php?title=title&&content=content
     5 */
     6 
     7 $title=trim($_GET['title']);
     8 $content=trim($_GET['content']);
     9 //pdo方式连接数据库,添加数据
    10 $mysql=new PDO("mysql:localhost;dbname=test_xs",'root','123');
    11 $mysql->query('set names utf8');
    12 $mysql->query('use test_xs');
    13 $addtime=time();
    14 $id=0;
    15 $sql="insert into news (title,content,addtime) values('$title','$content',$addtime)";
    16 if(!$mysql->query($sql))
    17 {
    18         die('mysql add err');
    19 }
    20 else
    21 {
    22         $id=$mysql->lastInsertId();
    23 }
    24 //添加数据到数据库后,导入新索引
    25 require 'php/lib/XS.php';
    26 try
    27 {
    28         $xs = new XS('news');
    29         $doc = new XSDocument; //关于XSDocument文档对象及操作方式,点此到官网查看
    30         $doc['id']=$id;  //数组方式赋值
    31         $doc->title=$title;//对象方式赋值
    32         $doc->setFields(array('content'=>$content,'addtime'=>$addtime));//数据方式批量赋值
    33         if($xs->index->add($doc))//将文档添加到索引中,这里的索引更新是异步的,因此不会立即生效,xunsearch搜索系统会在合适的时间内更新,关于index对象,点此到官网查看
    34         {
    35                 echo '添加成功';
    36         }
    37         else
    38         {
    39                 echo '数据添加成功但索引失败';
    40         }
    41 }
    42 catch (XSException $e)
    43 {
    44     echo $e;               // 直接输出异常描述
    45     if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
    46         echo "
    " . $e->getTraceAsString() . "
    ";
    47 }

      

     完成上面,就差不多算入门了,深入了解Xunsearch,还是到官网转转

      

  • 相关阅读:
    mysqld参数配置
    mysql配置详解
    前台获取json未定义问题之两种常用解决办法
    Java相关框架资料及其基础资料、进阶资料、测试资料之分享
    Jmeter之tomcat性能测试+性能改进措施
    Jmeter之mysql性能测试
    MyBatis之反射技术+JDK动态代理+cglib代理
    MyBatis之动态sql
    MyBatis+Hibernate+JDBC对比分析
    前台返回json数据的常用方式+常用的AJAX请求后台数据方式
  • 原文地址:https://www.cnblogs.com/GaZeon/p/5410774.html
Copyright © 2020-2023  润新知