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小时内删除。
发表评论