一、项目配置文件
基本说明:
1、项目配置是一个项目的核心灵魂,非常重要,通常保存为.ini文件,通常存储在/usr/local/xunsearch/sdk/php/app
2、以分号开头的行表示注释,空行直接被忽略不起任何作用
3、中括号包围的每个分区均为字段配置,字段个数根据自身项目的实际需求设定
4、每个项目必须有并且只能有一个类型为ID的主键字段,ID字段值得字母不区分大小写
ini文件中的常用配置:
名称:project.name = xxx
字符集:project.default_charset = utf-8(默认)
索引服务端口:server.index = 8383 (默认)
搜索服务端口:server.search = 8384 (默认)
项目字段:
字段名: [字段名]
字段类型:type = xxx
type字段类型:
主键型:id,确保每一条数据具备唯一性,是索引更新和删除的凭据,每个搜索项目必须有且仅有一个id字段,该字段的值不区分大小写
字符型:string,适用多数情况,也是默认值
数值型:numeric,包含整型和浮点数,仅当字段需用于以排序或区间检索时才设为该类型,否则请使用string即可
日期型:date,形式为 YYYYmmdd这样固定的8字节,如果没有区间检索或排序需求不建议使用
标题型:title,标题或名称字段,至多有一个该类型的字段
内容型:body,主内容字段,即本搜索项目中内容最长的字段,至多只有一个该类型字段,本字段不支持字段检索
index 索引方式:
xunsearch的索引有2种模式:其一是不标明字段的检索,称之为“混合区检索”;其二是标明特定字段的“字段检索”。 例如:搜索 XXX YYY 表示在混合区检索,返回的结果可能是 title 也有可能是 body 字段符合匹配; 而搜索 title:XXX 则表示仅检索 title 匹配 XXX 的数据。每个字段可以指定的索引方式的值如下:
none 不做索引,所有的搜索匹配均与本字段无关,这个字段只用于排序或搜索结果展示用到。
self 字段索引,可以在搜索时用 field:XXX 来检索本字段
mixed 混合区索引,不标明字段的默认搜索也可以检索本字段
both 相当于 self + mixed,两种情况均索引
通常情况默认值为 none ,但 id 型字段默认是 self ,title 型字段是 both ,body 型字段则固定为mixed
index = none
看下安装完xunsearch后系统自动给我们生成的demo.ini配置文件中的内容截图如下:
仿照demo.ini来创建一个给博客用的项目配置文件 文件名:tp51_blog.ini 文件名自己随便起,只要后缀是.ini就行
tp51_blog.ini文件内容如下:
下面使用php来操作xunsearch就使用这个新创建的tp51_blog.ini项目
友情提醒:
如果你感觉ini文件中的内容写起来很麻烦的话,可以采用官方提供的在线ini文件设计辅助工具。 INI配置工具
二、xunsearch工具篇
安装完 完整版本(含SDK包)的xunsearch中在util目录下提供了一系列丰富的工具本来给你提供便捷操作。在本文中util所在的路径为:
/usr/local/xunsearch/sdk/php/util
util目录中共有如下几个文件:
我们只挑选Indexer.php以及Quest.php进行简单使用说明。(假设目前所在路径就是util目录中)
索引管理器(Indexer.php)
Indexer 作为索引管理工具,提供了批量索引导入、清空索引、刷新索引队列、日志等各项功能, 导入索引支持数据源包括:csv, json,
mysql, sqlite 等,也可以自定义数据源。
运行脚本工具的 --help 选项可查看内置的帮助和说明,如乱码可在选项后加入 -c gbk 试试。
基本使用示例
1、#导入MySQL数据库的dbname.table_name表到test项目中 ./Indexer.php --source=mysql://root:pass@localhost/dbname --sql="SELECT id,title FROM table_name WHERE is_show = 1 AND is_del = 1" --project=test 用这个就可以导入数据到xunsearch,因为我们使用xunsearch的时候可能已经存在了大量数据。。更省事的往xunsearch里面灌数据 就是使用这个操作。。当然。。你也可以自己写脚本调用sdk提供的方法往xunsearch里面一条一条add数据。。不过这样。。你需要自己 写脚本。。对了,复制该条命令的时候别忘了把需要修改的地方换成你自己的。。 2、#查看test项目在服务端的相关信息 ./Indexer.php --info -p test 3、#强制刷新test项目的搜索日志 ./Indexer.php --flush-log --project test 4、#清空test项目的索引数据 ./Indexer.php --clean test 5、#查看Indexer.php工具的更多使用帮助说明 ./Indexer.php --help
Indexer.php使用文档地址:http://www.xunsearch.com/doc/php/guide/util.indexer
搜索测试工具(Quest.php)
Quest 是搜索测试工具,提供了搜索相关的各项功能,非常适合用于前期测试比较和纠错。 运行脚本工具的--help选项可查看内置的帮助
和说明,如乱码可在选项后加入 -c gbk 试试。
该功能可以让你直接在服务端用命令行工具搜索数据,而不用需要自己写代码刷新浏览器来查看xunsearch中的数据。
基本使用示例
1、#搜索test中包含"测试"的数据 ./Quest.php test 测试 2、#搜索test中包含"测试"的数据,并限制最多返回2条结果 ./Quest.php -p test -q 测试 --limit=2 3、#列出test项目中以"x"开头的搜索建议 ./Quest.php --suggest test x 4、#在test项目中修正搜索词"xm" ./Quest.php --correct test xm 5、#在test中列出和"测试"相关的搜索词 ./Quest.php --related test 测试 6、#查看test项目上周的5条最热门搜索词 ./Quest.php --hot=last --limit=5 test 7、#查看Quest.php工具的更多使用帮助说明 ./Quest.php --help
Quest.php使用文档地址:http://www.xunsearch.com/doc/php/guide/util.quest
三、使用PHP来操作xunsearch
认识对象:
XS 搜索项目总对象,所有相关操作均基于此对象及子方法。
XSDocument 搜索结果或索引文档,包括一组字段及值,相当于SQL表中的一条记录。
XSIndex 索引管理,通过XS对象的index属性或getIndex()方法获取。
XSSearch 搜索功能,通过XS对象的search属性或getSearch()方法获取。
XSException 异常类型,必须捕捉此异常以判断操作是否正确。
基本使用:
创建一个xunsearch.php文件,文件内的代码如下:
<?php include_once '/usr/local/xunsearch/sdk/php/lib/XS.php'; //根据自己安装的xunsearch路径来修改为你自己的路径 try{ //创建XS对象 只要是对索引操作 都必须使用XS对象 $xs = new XS('tp51_blog'); //自动使用$prefix/sdk/php/apptp51_blog.ini作项目配置文件,在这里$prefix是/usr/local/xunsearch/ //$xs = new XS('/path/to/tp51_blog.ini'); //使用/path/to/tp51_blog.ini //$xs一共有两个对象 一个是索引对象 一个是搜索对象 //var_dump($xs);exit; //获取索引对象(用来增删改的) $index = $xs->index; //添加索引数据 //$add_data = array('blog_id' => 1, 'title' => 'php的自动加载'); //$doc = new XSDocument($add_data); //$index->add($doc); //修改索引 根据主键id值修改 如果数据存在就更新 //$edit_data = array('blog_id' => 1, 'title' => 'php的自动加载哈哈修改测试嗯呢哦哦'); //$doc2 = new XSDocument($edit_data); //$index->update($doc2); //删除 根据主键id删除,删除多个传递一位数组 数组中的每一个元素都是主键值 //$index->del(1); /** * 索引注意点: * 索引更新是异步行为,有必要指出的是,出于性能优化设计,所有的索引操作(包含添加、删除、修改)均是异步的行为。 也就是说在PHP-SDK的相关API返回后,只是说明已经将索引变动提交到操作队列中,而并不是已经立即更新到磁盘上的索引数据库文件。 因此,搜索结果将不能立即体现出您的变动。但请放心,这个时间差我们已经控制在非常合理的范围内,通常是若干秒。 */ //同步索引 使用flushIndex()方法 //$index->flushIndex();//强制刷新服务端的当前库的索引缓存,上面说了不会立即生效需要等待若干秒,可以使用此方法来加快索引同步速度,也是异步的形式,只不过是尽可能快的立即同步过去 //清空索引 //$index->clean(); //完全清空索引数据如果当前数据库处于重建过程中将禁止清空 /****************伟大的分割线********************/ //获取搜索对象(用来搜索的 即查询) $search = $xs->search; //搜索 //$query_arr_object = $search->search('自动'); //包含:自动 //$query_arr_object = $search->search('php 自动'); //包含:php 和 自动 //$query_arr_object = $search->search('php OR 自动'); //包含:php 或 自动 //var_dump($query_arr_object);exit; //结果是一个数组对象,如果没有搜索结果,则是一个空array //遍历数组对象获取结果 foreach($query_arr_object as $key => $val) { //var_dump($val->getFields());exit; //获取当前的数组值 output: array('blog_id' => 1,'title' => 'php的自动加载') //var_dump($val->f('blog_id'));exit; //获取当前blog_id字段的值 output: 1 } } catch(XSException $e) { //echo $e->getTraceAsString(); exit('error'); }
更多使用方法请查阅指南或文档
xunsearch指南:xunsearch指南
xunsearchAPI:xunsearchAPI
好了。。就简单介绍到这里。。如果以后有海量的数据量的话,并且项目前台有搜索功能,完全可以用xunsearch来实现搜索,只不过是你后台添加、修改、删除一篇文章的时候,数据库的数据同步成功后,再次需要同步到xunsearch索引数据库里面,然后前台搜索的话直接从xunsearch里面搜索,不经过数据库搜索,这样也减轻了数据库的压力。。
提供一个chm版的xunsearch文档 xs_php_manual.chm
可参考如下网址:
https://blog.csdn.net/u010111874/article/details/77533661
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论