centos7 xunsearch编译安装及使用

1、什么是xunsearch?它是用来做什么的?

        Xunsearch 是免费开源的专业全文检索解决方案,简单易用而且 功能强大、性能卓越能轻松处理海量数据的全文检索。它包含后端索引、搜索服务程序和前端 脚本语言编写的开发工具包(称之为 SDK),旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。全文检索可以帮助您降低服务器搜索负荷、极大程度的提高搜索速度和用户体验。

        并且最新版本 1.4.11  已支持通过 composer 管理 PHP-SDK,并加入 yii2 扩展支持

        官网:http://www.xunsearch.com

        官方文档http://www.xunsearch.com/doc/php


2、xunsearch有什么特点?

        高性能:后端是采用 C/C++ 开发多线程服务端,索引设计基于 Xapian 和 scws 中文分词。单库最多支持 40 亿条数据,在 5 亿网页大约 1.5TB 的数据中检索时间不超过 1 秒(非缓存)。

        简单易用:前端是使用脚本语言编写的开发工具 (SDK),目前仅支持 PHP 语言。API 简单清晰,开发难度极低,提供全中文的示例代码、文档、辅助脚本工具等。

        全功能:除支持基础的自定义分词、字段检索、布尔搜索外,还直接支持用户急需的相关搜索、拼音搜索、搜索建议等专业功能。


3、适合哪些应用领域?

         适合具备独立服务器(需要Unix 类操作系统)的初、中型规模的网站,作为完整全文检索技术 解决方案。

        支持 MySQL 数据库全文检索、Web站内/论坛搜索、行业门户/垂直搜索、企业级的站内搜索、 计算机文件搜索等,各种专业搜索引擎(如购物搜索,旅游搜索、游戏搜索)、文档/文献检索 等各种领域。


4、安装服务端

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

        注意:即便您之前已经安装过 xunsearch,您也可以安装放心的使用该教程进行覆盖安装,会自动 完成升级操作,而不用担心会删除任何已存在的数据。我们制作的安装脚本包含了智能检测功能。   并且 xunsearch 的安装和运行都不需要 root 权限,强烈推荐单独设置一个系统用户用于安装 执行相关指令。

        1)、运行下面指令下载、解压安装包

        [root@localhost src]# wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2

         [root@localhost src]# tar -xjf xunsearch-full-latest.tar.bz2

        2、执行安装脚本,根据提示进行操作,主要是输入 xunsearch 软件包的安装目录,强烈建议单独 规划一个目录,而不是混到别的软件目录中

        [root@localhost src]# cd xunsearch-full-1.4.11/

        [root@localhost xunsearch-full-1.4.11]# sh setup.sh

        +==========================================+

        | Welcome to setup xunsearch(full)         |

        | 欢迎使用 xunsearch (完整版) 安装程序     |

        +------------------------------------------+

        | Follow the on-screen instructions please |

        | 请按照屏幕上的提示操作以完成安装         |

        +==========================================+

        Please specify the installation directory

        请指定安装目录 (默认为中括号内的值)

        [/usr/local/xunsearch]:

        

        Confirm the installation directory

        请确认安装目录:/usr/local/xunsearch [Y/n]y

        

        Checking scws ... no

        Installing scws (1.2.3) ...

        Extracting scws package ...

        Configuring scws ...

        Compiling & installing scws ...

        Checking scws dict ... no

        Extracting scws dict file ...

        Checking libuuid ... no, try to install it

        Extracting libuuid package ...

        Configuring libuuid ...

        Compiling & installing libuuid ...

        Checking xapian-core-scws ... no

        Installing xapian-core-scws (1.2.22) ...

        Extracting xapian-core-scws package ...

        Configuring xapian-core-scws ...

        Compiling & installing xapian-core-scws ...

        Checking libevent ... no

        Installing libevent (2.0.21-stable) ...

        Extracting libevent package ...

        Configuring libevent ...

        Compiling & installing libevent ...

        Extracting xunsearch package (1.4.11) ...

        Configuring xunsearch ...

        Compiling & installing xunsearch ...

        Cleaning ... done

        

        +=================================================+

        | Installation completed successfully, Thanks you |

        | 安装成功,感谢选择和使用 xunsearch              |

        +-------------------------------------------------+

        | 说明和注意事项:                                |

        | 1. 开启/重新开启 xunsearch 服务程序,命令如下: |

        |    /usr/local/xunsearch/bin/xs-ctl.sh restart

        |    强烈建议将此命令写入服务器开机脚本中         |

        |                                                 |

        | 2. 所有的索引数据将被保存在下面这个目录中:     |

        |    /usr/local/xunsearch/data

        |    如需要转移到其它目录,请使用软链接。         |

        |                                                 |

        | 3. 您现在就可以在我们提供的开发包(SDK)基础上    |

        |    开发您自己的搜索了。                         |

        |    目前只支持 PHP 语言,参见下面文档:          |

        |    /usr/local/xunsearch/sdk/php/README

        +=================================================+

        注意:第一次安装的话,过程可能会稍显漫长,请不必着急,您大可泡杯茶一边喝一边等待即可。

        3)、待命令运行结束后,如果没有出错中断,则表示顺利安装完成,然后就可以启动/重新启动 xunsearch 的后台服务,下面命令中的 $prefix 请务必替换为您的安装目录,而不是照抄。 

        [root@localhost xunsearch-full-1.4.11]#cd /usr/local/xunsearch

        [root@localhost xunsearch]# bin/xs-ctl.sh restart

        注意:强烈建议您将此命令添加到开机启动脚本中,以便每次服务器重启后能自动启动搜索服务程序, 在 Linux 系统中您可以将脚本指令写进 /etc/rc.local 即可。

     4)、安装完毕后,您就可以通过自带的脚本 ($prefix/bin/xs-ctl.sh) 启动/关闭 xunsearch 服务端了。用法举例:

      $prefix/bin/xs-ctl.sh start # 默认启动,绑定本地的 8383/8384 端口

        $prefix/bin/xs-ctl.sh -b inet start # 绑定全部 IP ,适合 SDK/服务端 不同服务器的情况

        $prefix/bin/xs-ctl.sh stop # 停止服务器,若启动时指定了 -b inet 此处也必须指定

       [root@localhost xunsearch]# bin/xs-ctl.sh -b local start

        WARNING: server[xs-indexd] is running (BIND:127.0.0.1:8383, PID:37599)

        WARNING: server[xs-searchd] is running (BIND:127.0.0.1:8384, PID:37601)

        5)、没错,安装就是这么简单。特别提示,搜索的所有索引数据将被保存到 $prefix/data 目录,因此如果您希望数据目录另行安排,请采用软连接形式确保 $prefix/data 链至真实数据目录。此外,如果服务端启动时使用了 -b inet 参数,那么请借助 iptables 或其它防火墙工具进行保护,xunsearch 本身出于性能考虑不做其它验证处理。


5、安装 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 索引管理工具

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

    2)、 如果您的搜索应用和服务端不在同一机器,则请复制 $prefix/sdk/php 目录到相应的搜索应用服务器,同时出于安全考虑,建议不要放到 WEB 可访问的目录。

           当 xunsearch 升级安装后必须重新复制安装后的 SDK 代码 去覆盖,否则可能造成版本不匹配导致错误。

    3)、使用 SDK 中的 util 工具要求您的 php(cli) 位于可执行文件默认搜索路径中 ( 即用 which php 可以检测到),如不在请做好软链接至 /usr/local/bin/php 。


6、检测运行环境

      基础运行条件要求 PHP 最低版本为 5.2.0,随着功能需求的不同可能还会用到一些其它扩展,具体请在 命令行环境里运行我们提供的检测脚本。运行方式如下:/path/to/bin/php $prefix/sdk/php/util/RequiredCheck.php。

        运行结果输出的中文编码默认为 UTF-8 ,如果您使用 GBK 环境请在运行命令最后加上 -c GBK 。 运行结果会给出一个可视化的表格说明检测结果,并在最终给出检测结论,告诉您是否符合运行的基础要求。

        [root@localhost xunsearch]# php sdk/php/util/RequiredCheck.php


至此,安装和准备工作已经完成了,您可以开始使用 Xunsearch PHP-SDK 开发自己的搜索应用了。


7、DEMO 服务器

        某些情况下,部分用户未能自己部署安装服务端,而又想体验 xunsearch 。因此,我们从发布 1.3.3 版本起,提供了一台供用户测试的 DEMO 服务器。用户无需安装服务端,直接下载 PHP-SDK 就可以开发测试。特别提示,DEMO 服务器只用于测试目的,并会不定期重置数据。

      具体操作可参考:http://www.xunsearch.com/doc/php/guide/start.demo


8、开发流程

     为便于讲解说明,假定 PHP-SDK 代码目录为 $sdk 。

      分析搜索需求,设计搜索应用必需的字段。

      编写项目配置文件,项目配置 ini 文件存放在 $sdk/app 目录。

      引入 $sdk/lib/XS.php 进行搜索功能和界面开发,借助 $sdk/util/*.php 工具进行测试或调试。


9、认识对象

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

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

        XSIndex — 索引管理,通过 XS 对象的 index 属性取得。

        XSSearch — 搜索功能,通过 XS 对象的 search 属性取得。

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

require '$sdk/lib/XS.php';   //  引入 xunsearch sdk
try {
    $xs = new XS('demo');    // demo  为项目名称,配置文件是:$sdk/app/demo.in i
    // ... 此外为其它 XSIndex/XSSearch  的相关功能代码
} catch (XSException $e) {
    echo $e . “n” . $e->getTraceAsString() . “n”; //  发生异常,输出描述
}

    编写配置文件:

    推荐使用我们的在线工具编写:http://www.xunsearch.com/tools/iniconfig

    demo 项目的配置如下:

冷暖自知一抹茶ck

    创建索引:

     获取 XSIndex  对象

require '$sdk/lib/XS.php';
try {
$xs = new XS('test'); //  创建 XS  对象,项目名称为:test
$index = $xs->index;   //  获取索引对象
// ... 在此编写过索引处理代码 ...
} catch (XSException $e) { }

    增删改

$doc = new XSDocument(array(  //  创建 XSDocument  
   'pid' => 123,  //  主键字段,必须指定
   'subject' => '测试文档标题', 'message' => '测试文档内容',
   'chrono' => time()
));
$index->add($doc);  //  添加文档,不检测便索引库内是否已有同一主键数据
$index->update($doc); //  更新文档,若有同主键数据则替换之
$index->del('123'); //  删除主键值为 234 的文档
$index->del(array('123','456')); //  删除主键值为 123 及 456 的文档

    清空索引

    当搜索字段文件变更或出现严重不同步时,建议清空索引。

$index->clean(); //  一执行立即生效

    索引同步

   出于性能优化设计,上面所看到的索引操作都是异步操作。也就是说您通过 PHP 调用的 API 返回后,索引变动是先保存在服务端的队列中,由服务端根据负荷延迟一并写入索引库。这个时间差我们控制在合理范围内,通常是几秒钟时间。但如果您在批量更新后希望立即同步,可以这样:

$index->flushIndex();


  使用搜索:

    获取 XSSearch 对象

require '$sdk/lib/XS.php';
try {
   $xs = new XS('test'); //  创建 XS  对象,项目名称为:test
   $index = $xs->search;   //  获取搜索对象
   // ... 在此编写过搜索处理代码 ...
} catch (XSException $e) { }

    搜索语法

    查询语句和流行的搜索引擎相似,通过空格把搜索词、句连接起来即可,字段检索使用 field:XXX 的格式。

    允许使用 AND/OR/NOT/XOR 等显式地布尔关系组合,可以使用小括号 () 包围表达优先级。

    支持使用双引号对较长搜索词进行精确匹配,要求字段设计时勾选“精确”项。

$search->search('杭州 西湖'); //  搜索同时包含这2个词的结果
$search->search('杭州 OR  西湖'); //  搜索包含其中一个词的结果
$search->search('subject:杭州 西湖'); //  包括西湖并且标题包含杭州的结果

    获取结果

    设置数量及偏移

$search->setLimit(5, 15); // 设置最多返回 5 条,并跳过前 15 条,即返回第 16-20 条结果

    获取搜索结果

$docs = $search->setQuery('测试')->search();  //  搜索 '测试'
foreach ($docs as $doc) {
   $subject = $search->highlight($doc->subject); //  高亮处理标题
   echo $doc->rank() . '. ' . $subject . ' [' . $doc->percent() . '%] - ' . date('Y-m-d’) . "n";
   echo $doc->message . "nn";
}

    获取搜索结果数量 ( 估算值)

$count = $search->getLastCount(); //  获取最后一次 $search->search()  的匹配数量
$count = $search->count(‘测试’); //  直接检索包含 ‘ 测试’  的数量

    搜索日志

    关于日志---系统内部会自动记录并分析搜索关键词日志,通过日志衍生出相关的扩展功能。日志同样是异步更新的并且延迟较大,如需要强制刷新请调用以下指令或索引 API 。

php $sdk/util/Indexer.php -p demo –flush-log # 通过辅助工具刷新日志
$index->flushLogging(); // 通过索引 API 更新

    热门搜索---通过 XSSearch::getHotQuery 方法获取热门搜索词,返回的数组以关键词为键名,搜索指数为值。

$words = $search->getHotQuery(); //  获取前 6 个总热门搜索词
$words = $search->getHotQuery(6, ‘lastnum’); //  获取前 10 个上周热门词

    相关搜索---通过 XSSearch::getRelatedQuery 方法获取热门搜索词,返回相关搜索词组成的数组。

$words = $search->getRelatedQuery(); //  获取前 6 个和最近一次 setQuery()  相关的搜索词
$words = $search->getRelatedQuery(‘测试’, 10);  //  获取 10 个和 ‘ 测试’  相关的搜索词

    搜索纠错---由于输入过快或拼音输入中文很容易出现错误,XSSearch::getCorrectedQuery 方法返回纠正后的关键词组成的数组。

$docs = $search->setQuery('测试')->search();  //  正常进行搜索误打的 '测试'
$corrected = $search->getCorrectedQuery(); //  尝试修正
if (count($corrected) > 0) { // 有修正词则列出
   echo "您是不是要找:n";
   foreach ($corredted as $word) echo $word . "n";
}

    搜索建议---类似常见搜索引擎那样,当用户在输入框键入少量字、拼音、声母时进行智能补全,可以节省用户的输入时间。

$words = $search->getExpandedQuery("c");     // 返回 array('测试')
$words = $search->getExpandedQuery("测");   // 返回 array('测试')
$words = $search->getExpandedQuery("cs");   // 返回 array('测试')



demo:

    1、编写test.ini 配置文件 ,放到文件夹/usr/local/xunsearch/sdk/php/app/ 目录下:

project.name  = test
project.default_charset = utf-8
server.index  = 8383
server.search = 8384


[pid]
type = id

[subject]
type = title

[message]
type = body

[chrono]
type = numeric

    2、创建索引

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';   //  引入 xunsearch sdk
try {
   $xs = new XS('test');    // test  为项目名称,配置文件是:$sdk/app/test.ini
    // ... 此外为其它 XSIndex/XSSearch  的相关功能代码

    $index = $xs->index;   //  获取索引对象
    
    $index->clean(); //  一执行立即生效             
    $doc = new XSDocument(
        array(                  //  创建 XSDocument  
                'pid' => 123,   //  主键字段,必须指定
                'subject' => '测试文档标题', 'message' => '测试文档内容',
                'chrono' => time()
         )
    );
    $index->add($doc);  //  添加文档,不检测便索引库内是否已有同一主键数据
    // $index->update($doc); //  更新文档,若有同主键数据则替换之
    //  $index->del('123'); //  删除主键值为 234 的文档
    //   $index->del(array('123','456')); //  删除主键值为 123 及 456 的文档

    $index->flushIndex();

} catch (XSException $e) {
   echo $e . "n" . $e->getTraceAsString() . "n"; //  发生异常,输出描述
}

    浏览器访问文件:http://www.ck.com/demo.php 

    3、搜索

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';   //  引入 xunsearch sdk
try {
    $xs = new XS('test');    // test  为项目名称,配置文件是:$sdk/app/test.ini
        // ... 此外为其它 XSIndex/XSSearch  的相关功能代码
        
        //$docs = $xs->search->search('测试');
        $docs = $xs->search->search('文档');
        echo"<pre>";
        var_dump($docs);
} catch (XSException $e) {
   echo $e . "n" . $e->getTraceAsString() . "n"; //  发生异常,输出描述
}

    再次访问浏览器:http://www.ck.com/demo.php 

    即可看到输出结果:

冷暖自知一抹茶ck

冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论