XunSearch(讯搜)的使⽤教程步骤
2013年7⽉12⽇ /
XunSearch是⼀款很不错的中⽂全⽂检索⼯具使⽤xunsearch快速构建⾃⼰的PHP全⽂搜索引擎。
需要注意的是XunSearch只能在Linux和Unix下运⾏。官⽅发布了⼀个DEMO 直接下载 PHP-SDK  就可以开发测试。
安装服务端
1. 下载&解压安装包:
2. 强烈推荐⽤ $HOME/xunsearch  或 /usr/local/xunsearch  作为安装⽬录 ( 以下简称 $prefix) 。⽆论您是⾸次安装
xunsearch  还是升级新版本,均只要直接执⾏我们提供的安装脚本,输⼊安装⽬录然后耐⼼等待即可。
cd xunsearch-full-1.3.3 ; sh setup.sh
3. 安装完毕后,您就可以通过⾃带的脚本 ($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 此处也必须指定
4. 没错,安装就是这么简单。特别提⽰,搜索的所有索引数据将被保存到 $prefix/data  ⽬录,因此如果您希望数据⽬录另⾏安排,请采⽤软连接形式确保 $prefix/data  链⾄真实数据⽬录。此外,如果服务端启动时使⽤了 -b inet  参数,那么请借助 iptables  或其它防⽕墙⼯具进⾏保护,xunsearch  本⾝出于性能考虑不做其它验证处理。
PHP-SDK
PHP-SDK 的代码默认包含在服务端安装⽬录中,即 $prefix/sdk/php  。⽬录结构如下:
|–  doc/                                          — HTML  格式的⽂档、API⼿册
|–  app/                                          —  搜索项⽬ ini  ⽂件的默认存储⽬录
|–  lib/XS.php                                  —  搜索库唯⼀⽂件,所有搜索相关功能均必须引⼊此⽂件
—  util/                                            —  辅助⼯具⽬录
|–  RequireCheck.php            —  检测您的 PHP  环境是否符合 xunsearch  运⾏条件
|–  Quest.php                          —  搜索测试⼯具
—  Indexer.php                        —  索引管理⼯具
1. 如果您的搜索应⽤和服务端在同⼀机器,则⽆需其它操作,只需在开发时直接引⼊$prefix/sdk/php/lib/XS.php 即可。
2. 如果您的搜索应⽤和服务端不在同⼀机器,则请复制 $prefix/sdk/php  ⽬录到相应的搜索应⽤服务器,同时出于安全考虑,建议不要放到 WEB  可访问的⽬录。
3. 使⽤ SDK  中的 util  ⼯具要求您的 php(cli)  位于可执⾏⽂件默认搜索路径中 ( 即⽤ which php 可以检测到),如不在请做好软链接⾄ /usr/local/bin/php 。
检测运⾏环境
Xunsearch  要求 PHP  是 5.2.0  及以上版本,强烈推荐使⽤ 5.3.x  系列的 PHP。请在安装完毕后直接执⾏$prefix/sdk/php/util/RequireCheck.php  看输出即可。如果您的终端编码不是 UTF-8 请在调⽤时加上 -c gbk  参数。
DEMO 服务器
某些情况下,部分⽤户未能⾃⼰部署安装服务端,⽽⼜想体验 xunsearch 。因此,我们从发布 1.3.3  版本起,提供了⼀台供⽤户测试的 DEMO  服务器。⽤户⽆需安装服务端,直接下载 PHP-SDK  就可以开发测试。特别提⽰,DEMO 服务器只⽤于
测试⽬的,并会不定期重置数据。
单独下载 PHP-SDK
如果您没有安装服务端,想直接体验 DEMO  服务器的,您只要从下⾯地址下载解压 SDK  压缩包即可。
解压后得到 xunsearch-sdk  ⽬录,相应的搜索库⽂件为 xunsearch-sdk/php/lib/XS.php
服务器地址
索引服务器:demo.xunsearch  端⼝ 9393
搜索服务器:demo.xunsearch  端⼝ 9394
php手册官方中文版开发流程
· 为便于讲解说明,假定 PHP-SDK  代码⽬录为 $sdk 。
· 分析搜索需求,设计搜索应⽤必需的字段。
· 编写项⽬配置⽂件,项⽬配置 ini  ⽂件存放在 $sdk/app  ⽬录。
· 引⼊ $sdk/lib/XS.php  进⾏搜索功能和界⾯开发,借助 $sdk/util/*.php  ⼯具进⾏测试或调试。
认识对象
· XS  —  搜索项⽬总对象,所有相关操作均基于此对象及⼦⽅法。
· XSDocument —  搜索结果或索引⽂档,包括⼀组字段及值,相当于 SQL  表中的⼀条记录。
· XSIndex —  索引管理,通过 XS  对象的 index  属性取得。
·
XSSearch — 搜索功能,通过 XS  对象的 search  属性取得。
· XSException —  异常类型,必须捕捉此异常以判断操作是否正确,例:
编写配置⽂件
推荐使⽤我们的在线⼯具编写:
demo 项⽬的配置如下:
创建索引
获取 XSIndex  对象
增删改清空索引
1
2
3
4
5
6
7require ‘ $ 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” ; //  发⽣异常,输出描述  }
1
2
3
4
5
6require ‘ $ sdk / lib / XS . php’ ;
try {      $ xs = new XS (‘ demo’ ) ; //  创建 XS  对象,项⽬名称为:demo        $ index = $ xs -> index ;    //  获取索引对象      // ... 在此编写过索引处理代码 ...  } catch ( XSException $ e ) { }
1
2
3
4
5
6
7
8
9$ 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 的⽂档
当搜索字段⽂件变更或出现严重不同步时,建议清空索引。
索引同步
出于性能优化设计,上⾯所看到的索引操作都是异步操作。也就是说您通过 PHP  调⽤的 API 返回后,索引变动是先保存在服务端的队列中,由服务端根据负荷延迟⼀并写⼊索引库。这个时间差我们控制在合理范围内,通常是⼏秒钟时间。但如果您在批量更新后希望⽴即同步,可以这样:
使⽤搜索
获取 XSSearch 对象
搜索语法
· 查询语句和流⾏的搜索引擎相似,通过空格把搜索词、句连接起来即可,字段检索使⽤ field:XXX 的格式。
· 允许使⽤ AND/OR/NOT/XOR  等显式地布尔关系组合,可以使⽤⼩括号 () 包围表达优先级。
· ⽀持使⽤双引号对较长搜索词进⾏精确匹配,要求字段设计时勾选“精确”项。
$search->search(‘ 杭州 西湖’); //  搜索同时包含这2个词的结果
$search->search(‘ 杭州 OR  西湖’); //  搜索包含其中⼀个词的结果
$search->search(‘subject:杭州 西湖’); //  包括西湖并且标题包含杭州的结果
获取结果
· 设置数量及偏移
$search->setLimit(5, 15);  //  设置最多返回 5 条,并跳过前 15 条,即返回第 16-20 条结果
· 获取搜索结果
1$ index -> clean ( ) ; //  ⼀执⾏⽴即⽣效
1$ index -> flushIndex ( ) ;
1
2
3
4
5
6require ‘ $ sdk / lib / XS . php’ ;
try {      $ xs = new XS (‘ demo’ ) ; //  创建 XS  对象,项⽬名称为:demo        $ index = $ xs -> search ;    //  获取搜索对象      // ... 在此编写过搜索处理代码 ...  } catch ( XSException $ e ) { }
1
2
3
4
5
6$ 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 ⽅法返回纠正后的关键词组成的数组。
搜索建议
类似常见搜索引擎那样,当⽤户在输⼊框键⼊少量字、拼⾳、声母时进⾏智能补全,可以节省⽤户的输⼊时间。
$words = $search->getExpandedQuery(‘c’); //  返回 array(‘ 测试’)
$words = $search->getExpandedQuery(‘ 测’); //  返回 array(‘ 测试’)
$words = $search->getExpandedQuery(‘cs’);  //  返回 array(‘ 测试’)源⾃:www.oschina/p/xu
nsearch 1
2
3
4
5
6$ docs = $ search -> setQuery (‘ 侧试’ ) -> search ( ) ;    //  正常进⾏搜索误打的 ‘ 侧试’
$ corrected = $ search -> getCorrectedQuery ( ) ; //  尝试修正  if ( count ( $ corrected ) > 0 ) { // 有修正词则列出      echo “ 您是不是要: n” ;      foreach ( $ corredted as $ word ) echo $ word . “ n” ;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。