简介
C++开发的多线程服务,1.5T搜索不超过1秒;单库最多支持40亿条数据
安装
下载:xunsearch-full-latast.tar.bz2
解压:tar -jxvf xunsearch-full-latest.tar.bz2
安装: cd xunsearch-full-latest;
sh setup.sh #执行安装脚本即可
启动
启动:cd /usr/local/xunsearch/bin/ #安装目录
./xs-ctl.sh start
说明:索引会启动两个服务
1.索引服务(8383);负责索引的添加,删除,修改
2.搜索服务(8384),负责提供搜索服务,即查询
查看命令
ps aux | grep xc
xs-ctl.sh start #启动
xs-ctl.sh start #停止
使用
每个xunseach都有一个独立的配置文件ini
cat $prefix/sdk/php/app/demo.ini
填充数据方式
cd $prefix/sdk/php/
util/Indexer.php --source=csv clean demo
数据源格式:csv
粘贴数据源:粘贴后回车
保存数据:linux:ctrl+d
Window:Ctrl+z
查询
随机查
$prefix/sdk/php/util/Quest.php demo 项目
$prefix/sdk/php/util/Quest.php demo 项目测试
指定字段
$prefix/sdk/php/util/Quest.php demo pid:2
$prefix/sdk/php/util/Quest.php demo 项目 or pid:2
特殊搜索:
$prefix/sdk/php/util/Quest.php --hot demo #热度
$prefix/sdk/php/util/Quest.php --related demo 项目 #相关的
$prefix/sdk/php/util/Quest.php --correct demo yunserch #纠错的
$prefix/sdk/php/util/Quest.php --suggest demo yunserch #搜索建议
刷新搜索日志:
$prefix/sdk/php/util/Indexer.php --flush-log demo
Xunsearch的ini配置说明
每个项目一个ini,
常规配置
名称:project.name=XXX
字符集:project.default_charset=UTF-8 #默认
索引服务端口:server.index=8383 #默认
搜索服务端口:server.search=8384 #默认
字段名:[字段名]
字符型:type = XXX
字符型:string 适用于多数情况,也是默认值
数值型:numeric,包含整形和浮点数。仅当字段需要用于以排序或区间检索时才为该类型,否则用string
日期型:date,形式为YYYYmmdd这样的8字节,如果没有区间或排序需求不建议使用。
主键型:id,确保每条数据具备唯一值,是索引更新和删除的凭据,每个搜索项目必须有且仅有一个id字段,该字段值不区分大小写
标题型:title,标题或名称字段,至多有一个该类型的字段
内容型:body,主内容字段,即本搜索项目最长的字段,至多有一个该类型字段,本字段不支持字段检索
在线测试工具:
http://xunsearch.com/tools/iniconfig
Xunsarch的php使用
认识对象:
XS XS是搜索项目的总对象,所有操作均基于此对象或其属性
XSDocument 搜索结果或索引文档,包括一组字段及值,相当于Sql表中的一条记录
XSIndex 索引管理,通过XS对象的index属性取得
XSException异常类型,必须通过次异常类以判断操作是否正确
基本使用
本地引入即可
认识对象
XS XS是搜索项目的总对象,所有操作均基于此对象或其属性
XSDocument 搜索结果或索引文档,包括一组字段及值,相当于Sql表中的一条记录
XSIndex 索引管理,通过XS对象的index属性取得
XSException 异常类型,必须通过次异常类以判断操作是否正确
基本使用
<?php
本地引入即可
include ‘/usr/local/xunsarch/sdk/php/lib/XS.php’;
Try{
$xs = new XS('demo’); //创建索引对象
$index = $xs->index; //获取管理对象
$search = $xs->search; //获取搜索对象
//创建记录
$data = [
'pid’=>123,
'subject’=> ‘测试文档标题’,
'message’=> ‘测试标题内容’,
'chrono’=> time()
];
$doc = new XSDocument($data);
$index->add($dac); //添加索引
$index->flushIndex(); //同步索引
$index->updata($doc); //修改
$res = $search->search(‘测试’); //查询:测试
$res = $search->search(‘测试 文档’); //查询:测试和文档
$res = $search->search(‘测试 OR 文档’); //查询:测试或文档
var_dump($res);
$index->del(‘123’); //删除,多个传数组
$index->clean(); //清空索引
} catch (XSException $e){
echo $e.”\n”.$e->getTracesAsString().”\n”;
}