今天鼓捣了xunsearch,感觉官方指南写得挺详细,于是按照指南一步一步走,但是感觉越看越凌乱,像看API一样,新手看得特费劲,网上也少有新手教程,于是略过今天的歪路,记录一下我的安装步骤。

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

 一,软件准备

  PHP5.2.0以上,php已经配置到linux环境变量。

 二,傻瓜式安装

#获取
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
#解压
tar -xjf xunsearch-full-latest.tar.bz2
#安装
cd xunsearch-full-1.4./
sh setup.sh

  接下来提示确认安装目录,默认/usr/local/xunsearch,直接回车确认,y,一个泡面的时间安装完成。

  安装完成后,启动/重启xunsearch后台服务,并建议将下面命令添加到 /etc/rc.local 开机脚本中。

/usr/local/xunsearch/bin/xs-ctl.sh start

  搜索系统将所有数据保存在 xunsearch安装目录/data 目录中。 如果您希望数据目录另行安排或转移至其它分区,请将 xunsearch安装目录/data 作为软链接指向真实目录。

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

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

require_once '$prefix/sdk/php/lib/XS.php';

  

  shell测试xunsearch的php运行环境,运行后会出现配置提示:

#如果php没有配置到linux环境变量
/path-to-php/bin/php /usr/local/xunsearch/sdk/php/util/RequiredCheck.php #已经配置过php环境变量
/usr/local/xunsearch/sdk/php/util/RequiredCheck.php

  Δ想在shell下测试体验xunsearh的搜索,可以点击体验demo项目

 三,简单使用xunsearch

  首先理清xunsearch的使用流程:

  1. 配置项目ini(一个sql表对应一个搜索项目ini)
  2. 使用Indexer索引管理(shell方式连接数据库表,建立索引)
  3. 使用XSsearch搜索对象(在项目中搜索已经建立索引的表,取出数据)

  

  为了方便调试,我这里将整个php-sdk目录复制到本地服务器根目录下,我使用的是(nginx 默认html目录)

cp -R /usr/local/xunsearch/sdk/php /path-to-nginx/html/

  至此,我使用PHP-SDK作为php-sdk所在的目录。

  下面以一个小例子简单讲解。

  项目要求:新闻搜索,可以添加文章,可以根据关键字搜索。

  使用mysql,test_xs数据库,表名news,字段如下:

+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int() unsigned | NO | PRI | NULL | auto_increment |
| title | varchar() | NO | | | |
| content | varchar() | NO | | | |
| addtime | int() unsigned | YES | | | |
+---------+------------------+------+-----+---------+----------------+ #此处先导入测试数据
mysql> insert into news (title,content,addtime) values('第一个新闻','今天天气非常好,适合搞搜索',unix_timestamp(now())),('第二个新闻','据新华社今天报道,xunsearch搜索引擎很强大非常好',unix_timestamp(now())),('第三个新闻','天文台预测,今天将启动新一轮的降雨',unix_timestamp(now()));

  

  1,配置项目ini

    项目配置ini位于 PHP-SDK/sdk/php/app目录下,xunsearch给了一个demo项目的配置:demo.ini,你可以打开参考其写法,具体配置的详细,你可以点此到官网查看,有例子讲解,这里不累叙,官网还提供了ini配置在线编写器,非常方便。

    我这里简单写了一份:news.ini

project.name = news

[id]
type = id
tokenizer = full [title]
type = title [content]
type = body [addtime]
type = numeric

 

  2,使用Indexer索引管理器

    每一个项目配置ini配置对应数据库中的一个表,作为一个全文检索工具,必须首先建立索引。Xunsearch提供了使用php编写的Indexer索引管理工具,位于PHP-SDK/util/Indexer.php,提供了(shell下)批量索引导入、清空索引、刷新索引队列、日志等各项功能,具体语法可以点此到官网查看

  此处作为连接数据库,导入索引用。由于我是pdo方式连接mysql,因此写法比较特殊:

PHP-SDK/util/Indexer.php --source=pdo.MySQL://root:123@localhost/test_xs --sql="select * from news" --project=news

    将会提示:

初始化数据源 ... pdo.MySQL://root:123@localhost/test_xs
开始批量导入数据 (请直接输入数据) ...
完成索引导入:成功 3 条,失败 0 条
刷新索引提交 ...

  索引建立后,可以先用Quest搜索工具测试索引是否建立成功,位于PHP-SDK/util/Quest.php,Quest具体语法点此官网查看

  这里小测一个 PHP-SDK/util/Quest.php news 非常好

在 3 条数据中,大约有 2 条包含 非常好 ,第 1-2 条,用时:0.1118 秒。

1. 第一个新闻 #1# [100%,0.55]
今天天气非常好,适合搞搜索
Addtime:1461037973 2. 第二个新闻 #2# [90%,0.50]
据新华社今天报道,xunsearch搜索引擎很强大非常好
Addtime:1461037973

  可见,项目配置news.ini中有提及的字段,搜索结果都展示出来了。

  3,使用XSSearch搜索对象

  关于XS的基础对象,可以点此到官网查看,此处极其简单的新闻添加,搜索页。

  1,newsget.php 在浏览器上输入 XXX/newsget.php?key=关键字 搜索查看

 <?php
/*
newsget.php
usage:newsget.php?key=keyword
*/ $key=trim($_GET['key']);
require 'php/lib/XS.php';
try
{
$xs = new XS('news'); //实例化XS对象
$search=$xs->search; //获取XSSearch搜索对象,了解跟多,点此到官网查看 $docs=$search->search($key); //通过XSsearch获取XSDocment文档对象
foreach ($docs as $doc) //循环获取文档内容,获取更多XSDocument文档内容,点此到官网查看 {
echo '第'.$doc->rank().'条结果 , 匹配度[' . $doc->percent() . "%]\n<br/>";
echo 'id:'.$doc->docid().',标题:'.$doc->title.', 搜索内容:'.$doc->content . "\n<br/>"; //使用类似php __get的方式获取文档的字段内容
echo '<br/>';
}
}
catch (XSException $e)
{
echo $e; // 直接输出异常描述
if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况
echo "\n" . $e->getTraceAsString() . "\n";
}

  

  2,newsadd.php 在浏览器上输入XXX/newsadd.php?title=标题&&content=内容 添加内容到数据库和更新到索引中

 <?php
/*
newsadd.php
usage:newsadd.php?title=title&&content=content
*/ $title=trim($_GET['title']);
$content=trim($_GET['content']);
//pdo方式连接数据库,添加数据
$mysql=new PDO("mysql:localhost;dbname=test_xs",'root','123');
$mysql->query('set names utf8');
$mysql->query('use test_xs');
$addtime=time();
$id=0;
$sql="insert into news (title,content,addtime) values('$title','$content',$addtime)";
if(!$mysql->query($sql))
{
die('mysql add err');
}
else
{
$id=$mysql->lastInsertId();
}
//添加数据到数据库后,导入新索引
require 'php/lib/XS.php';
try
{
$xs = new XS('news');
$doc = new XSDocument; //关于XSDocument文档对象及操作方式,点此到官网查看 $doc['id']=$id;  //数组方式赋值
$doc->title=$title;//对象方式赋值
$doc->setFields(array('content'=>$content,'addtime'=>$addtime));//数据方式批量赋值
if($xs->index->add($doc))//将文档添加到索引中,这里的索引更新是异步的,因此不会立即生效,xunsearch搜索系统会在合适的时间内更新,关于index对象,点此到官网查看
{
echo '添加成功';
}
else
{
echo '数据添加成功但索引失败';
}
}
catch (XSException $e)
{
echo $e; // 直接输出异常描述
if (defined('DEBUG')) // 如果是 DEBUG 模式,则输出堆栈情况
echo "\n" . $e->getTraceAsString() . "\n";
}

  

 完成上面,就差不多算入门了,深入了解Xunsearch,还是到官网转转

  

Xunsearch迅搜(基于 xapian+scws 的开源中文搜索引擎)安装与简单使用的更多相关文章

  1. xunsearch 迅搜初探

    2014年1月2日 19:34:12 [root@localhost bin]# ./php /usr/local/lamp/xunsearch/sdk/php/util/Quest.php demo ...

  2. xunsearch迅搜体验

    安装与启动 http://www.xunsearch.com/doc/php/guide/start.installation 编写配置文件 http://www.xunsearch.com/doc/ ...

  3. 关于开源中文搜索引擎架构coreseek中算法详解

     Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索.论坛/站内搜索.数据库搜索.文档/文献 ...

  4. 开源中文检索引擎Coreseek简单使用

    Coreseek结合MySQL使用简单示例,如下所示: echo 北京 | iconv -f gbk -t utf-8 | search -c D:\web\coreseek\etc\csft_mys ...

  5. NodeBB – 基于 Node.js 的开源论坛系统

    NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js 开发,支持 Redis 或 MongoDB 的数据库.它利用 Web So ...

  6. 基于存储过程的MVC开源分页控件

    基于存储过程的MVC开源分页控件--LYB.NET.SPPager 摘要 现在基于ASP.NET MVC的分页控件我想大家都不陌生了,百度一下一大箩筐.其中有不少精品,陕北吴旗娃杨涛大哥做的分页控件M ...

  7. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  8. TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具

    怀着鸡动的心情跟大家介绍一款国产开源运维软件TriAquae,轻松帮你搞定大部分运维工作!TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具,可以允许用户通过一台控制端管理上千 ...

  9. 微信小程序--简约风博客小程序(基于云开发 - 全开源)

    微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...

随机推荐

  1. ACM 推桌子

    推桌子 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 The famous ACM (Advanced Computer Maker) Company has re ...

  2. ACM: Long Live the Queen - 树上的DP

    Long Live the Queen Time Limit:250MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u D ...

  3. LinkedHashMap和HashMap的比较使用(转)

    (转)http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html import java.util.HashMap; import  ...

  4. Code[VS]1690 开关灯 题解

    Code[VS]1690 开关灯 题解     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description:     YYX家门前 ...

  5. NOI模拟赛Day3

    终于A题啦鼓掌~开心~ 开考看完题后,觉得第二题很好捏(傻叉上线 搞到十一点准备弃疗了然后突然发现我会做第一题 于是瞎码了码,就去准备饭票了... 好了,停止扯淡(就我一个我妹子每天不说话好难受QAQ ...

  6. Linux下bash: scp: command not found问题 或者装ssh包时报错 Requires: libedit.so.0()(64bit)

        一.用scp命令从物理主机向CentOS 6.1虚拟机传送文件,提示以下错误:bash: scp: command not found到CentOS 6.1虚拟机查看也缺少scp命令.该虚拟机 ...

  7. spring源码学习之路---IOC实现原理(三)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章我们已经初步认识了Be ...

  8. Maven_根据不同个环境打包, 获取不同的配置文件等等

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. uboot中添加FIQ中断及相关问题

    本文主要说明了在uboot中添加FIQ中断时遇到的问题以及对应的解决办法. 首先交代一下项目的软硬件环境.硬件方面,使用s3c2440作为主控芯片,外接串口.网卡等设备.软件方面,主控芯片上电后运行u ...

  10. RecyclerView使用时遇到的问题

    一.概述 二.常见问题: 1.如何为RecyclerView的Item设置点击事件? 1.1 问题描述 类似于下列方法 RecyclerView.setOnItemClickListener(OnCl ...