开源免费、高性能、多功能 简单易用的专业全文检索技术方案

        Xunsearch 是一个高性能、全功能的全文检索解决方案。

        Xunsearch 旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。

        Xunsearch 中文译名为“迅搜”,代码中的经常被缩写为 XS,既是英文名称的缩略也是中文声母缩写。 这儿的“迅”是快速的意思,至少包含了两层涵义:其一代表了搜索结果的响应能力,其二则为二次开发难度、速度。

        Xunsearch 采用结构化分层设计,包含后端服务、前端开发包两大部分,层次清晰而不交叉。 其中后端是采用 C/C++ 编写的守护进程,而前端采用最为流行的脚本语言 PHP ,对于 web 搜索项目更为方便。 具体参见架构设计

        Xunsearch 极大程度降低的搜索开发的难度,除了常规的中文分词、字段检索、布尔语法等功能外, 还比其它免费的解决方案提供了用户急需的相关搜索、拼音搜索、结果高亮、搜索建议等等。 具体的清单请参见我们的功能列表

        应用领域:Xunsearch 可以帮助您建立各种行业门户/垂直搜索、BBS 论坛搜索、CMS/Web站内搜索、文档/文献资料检索, 以及各种基于现有数据库系统的全文检索。

        官网:http://www.xunsearch.com/ 

        

冷暖自知一抹茶ck


        安装

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

        1. 安装、升级 Xunsearch

        1)、运行下面指令下载、解压安装包

[root@cklocalhost ~]# wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
[root@cklocalhost ~]# tar -xjf xunsearch-full-latest.tar.bz2

        2)、执行安装脚本,根据提示进行操作,主要是输入 xunsearch 软件包的安装目录,强烈建议单独 规划一个目录,而不是混到别的软件目录中。

[root@cklocalhost ~]# mv xunsearch-full-1.4.15/ /usr/local/src/
[root@cklocalhost ~]# cd /usr/local/src/
[root@cklocalhost src]# cd xunsearch-full-1.4.15/
[root@cklocalhost xunsearch-full-1.4.15]# sh setup.sh

+==========================================+
| Welcome to setup xunsearch(full)         |
| 欢迎使用 xunsearch (完整版) 安装程序     |
+------------------------------------------+
| Follow the on-screen instructions please |
| 请按照屏幕上的提示操作以完成安装         |
+==========================================+

Please specify the installation directory
请指定安装目录 (默认为中括号内的值)
[y]:/usr/local/xunsearch

Confirm the installation directory
请确认安装目录:/usr/local/xunsearch [Y/n]Y

Checking scws ... no
Installing scws (1.2.3) ... 
Extracting scws package ...
Configuring scws ...
Compiling & installing scws ...
Checking scws dict ... no
Extracting scws dict file ... 
Checking libuuid ... no, try to install it
Extracting libuuid package ...
Configuring libuuid ...
Compiling & installing libuuid ...
Checking xapian-core-scws ... no
Installing xapian-core-scws (1.4.17) ... 
Extracting xapian-core-scws package ...
Configuring xapian-core-scws ...
Compiling & installing xapian-core-scws ...
Checking libevent ... no
Installing libevent (2.0.21-stable) ... 
Extracting libevent package ...
Configuring libevent ...
Compiling & installing libevent ...
Extracting xunsearch package (1.4.15) ...
Configuring xunsearch ...
Compiling & installing xunsearch ...
Cleaning ... done

+=================================================+
| Installation completed successfully, Thanks you |
| 安装成功,感谢选择和使用 xunsearch              |
+-------------------------------------------------+
| 说明和注意事项:                                |
| 1. 开启/重新开启 xunsearch 服务程序,命令如下: |
|    /usr/local/xunsearch/bin/xs-ctl.sh restart
|    强烈建议将此命令写入服务器开机脚本中         |
|                                                 |
| 2. 所有的索引数据将被保存在下面这个目录中:     |
|    /usr/local/xunsearch/data
|    如需要转移到其它目录,请使用软链接。         |
|                                                 |
| 3. 您现在就可以在我们提供的开发包(SDK)基础上    |
|    开发您自己的搜索了。                         |
|    目前只支持 PHP 语言,参见下面文档:          |
|    /usr/local/xunsearch/sdk/php/README
+=================================================+

        第一次安装的话,过程可能会稍显漫长,请不必着急,您大可泡杯茶一边喝一边等待即可。

        3)、待命令运行结束后,如果没有出错中断,则表示顺利安装完成,然后就可以启动/重新启动 xunsearch 的后台服务

cd $prefix ; bin/xs-ctl.sh restart

bin/xs-ctl.sh -b local start    // 监听在本地回环地址 127.0.0.1 上
bin/xs-ctl.sh -b inet start     // 监听在所有本地 IP 地址上
bin/xs-ctl.sh -b a.b.c.d start  // 监听在指定 IP 上
bin/xs-ctl.sh -b unix start     // 分别监听在 tmp/indexd.sock 和 tmp/searchd.sock


// 我的安装路径是/usr/local/xunsearch
[root@cklocalhost xunsearch-full-1.4.15]# cd /usr/local/xunsearch
[root@cklocalhost xunsearch]# bin/xs-ctl.sh restart
INFO: starting server[xs-indexd] ... (BIND:127.0.0.1:8383)
INFO: starting server[xs-searchd] ... (BIND:127.0.0.1:8384)

        4)、将xunsearch设置为开机启动(可选)

        编辑文件:vim /etc/rc.local,我这是个软连指向到的路径是 /etc/rc.d/rc.local   ,添加如下内容:

[root@cklocalhost xunsearch]# vim /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

# 追加如下内容
# 完整启动的路径 && 启动命令
/usr/local/xunsearch/bin/xs-ctl.sh start

        ***划重点***

        如果重启服务器发现讯搜服务没有启动,那是因为 /etc/rc.d/rc.local 文件没有执行权限,给予执行权限就可以了

# 给予执行权限
chmod +x /etc/rc.d/rc.local

        重启服务器就可以开机启动了,至此完成。

        5)、重启虚拟机,查看端口号,看服务是否自动启动

[root@cklocalhost ~]# netstat   -nultp                ###该命令是查看当前所有已经使用的端口情况
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      7062/php-fpm: maste 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      7454/X              
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6797/nginx: master  
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      7466/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6711/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      6719/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      6898/master         
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      7839/sshd: root@pts 
tcp        0      0 127.0.0.1:8383          0.0.0.0:*               LISTEN      6791/xs-indexd: ser 
tcp        0      0 127.0.0.1:8384          0.0.0.0:*               LISTEN      7055/xs-searchd: ma 
tcp6       0      0 :::3306                 :::*                    LISTEN      7053/mysqld         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::6000                 :::*                    LISTEN      7454/X              
tcp6       0      0 :::22                   :::*                    LISTEN      6711/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      6719/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      6898/master         
tcp6       0      0 ::1:6010                :::*                    LISTEN      7839/sshd: root@pts 
udp        0      0 192.168.122.1:53        0.0.0.0:*                           7466/dnsmasq        
udp        0      0 0.0.0.0:67              0.0.0.0:*                           7466/dnsmasq        
udp        0      0 0.0.0.0:68              0.0.0.0:*                           6514/dhclient       
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd           
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           6274/avahi-daemon:  
udp        0      0 127.0.0.1:323           0.0.0.0:*                           6442/chronyd        
udp        0      0 0.0.0.0:43416           0.0.0.0:*                           6274/avahi-daemon:  
udp        0      0 0.0.0.0:931             0.0.0.0:*                           6268/rpcbind        
udp6       0      0 :::111                  :::*                                1/systemd           
udp6       0      0 ::1:323                 :::*                                6442/chronyd        
udp6       0      0 :::931                  :::*                                6268/rpcbind

        6)、将xunsearch目录添加到系统变量(可选)

## 编辑 vi /etc/profile ,将xunsearch启动脚本所在目录添加到系统变量中
[root@cklocalhost ~]# vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/xunsearch/bin
## 重启让配置立即生效
[root@cklocalhost ~]# source /etc/profile
## 使用
[root@cklocalhost ~]# xs-ctl.sh stop
INFO: stopping server[xs-indexd] (BIND:127.0.0.1:8383) .... [OK]
INFO: stopping server[xs-searchd] (BIND:127.0.0.1:8384) .... [OK]
[root@cklocalhost ~]# xs-ctl.sh start
INFO: starting server[xs-indexd] ... (BIND:127.0.0.1:8383)
INFO: starting server[xs-searchd] ... (BIND:127.0.0.1:8384)


        安装 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 '/usr/local/xunsearch/sdk/php/lib/XS.php';

        如果您在其它服务器部署前端搜索代码,请将 SDK 代码整个目录复制到相应的服务器上,但并不要求放到 web 可访问目录,考虑安全性也不推荐这么做。

        Note: 对于前端和后端分离的用户来说,当 xunsearch 升级安装后必须重新复制安装后的 SDK 代码 去覆盖,否则可能造成版本不匹配导致错误。


        检测 PHP-SDK 的运行条件

        从现在开始的文档及示范代码中我们都假定您将 xunsearch 安装在 $prefix 目录中,而不再另行说明。 

        基础运行条件要求 PHP 最低版本为 5.2.0,随着功能需求的不同可能还会用到一些其它扩展,具体请在 命令行环境里运行我们提供的检测脚本。如果您的 php 可执行文件不在默认搜索路径中,假设是安装在 /path/to/bin/php 请使用第二种方式运行。运行方式如下:

1. $prefix/sdk/php/util/RequiredCheck.php
2. /path/to/bin/php $prefix/sdk/php/util/RequiredCheck.php
3. $prefix/sdk/php/util/RequiredCheck.php -c gbk

        运行结果输出的中文编码默认为 UTF-8 ,如果您使用 GBK 环境请在运行命令最后加上 -c GBK 。 运行结果会给出一个可视化的表格说明检测结果,并在最终给出检测结论,告诉您是否符合运行的基础要求。

        至此,安装和准备工作已经完成了,您可以开始使用 Xunsearch PHP-SDK 开发自己的搜索应用了。

[root@cklocalhost www.laravel.com]# /usr/local/xunsearch/sdk/php/util/RequiredCheck.php 
Xunsearch PHP-SDK 运行需求检查
==============================

检查内容
--------

本程序用于确认您的服务器配置是否能满足运行 Xunsearch PHP-SDK 的要求。
它将检查服务器所运行的 PHP 版本,查看是否安装了合适的PHP扩展模块,以及
确认 php.ini 文件是否正确设置。

+------------+------------+--------------------------+--------------------------------+
| 项目       | 结果       | 用于                     | 备注                           |
+------------+------------+--------------------------+--------------------------------+
| PHP 版本   | 7.3.0      | XS(core)                 | PHP 5.2.0 或更高版本是必须的。 |
| SPL 扩展   | OK         | XS(core)                 | SPL 扩展用于自动加载和对象戏法 |
| PCRE 扩展  | OK         | XSDocument, XSSearch     | 用于字符串切割、判断           |
| 编码转换   | mbstring   | XSDocument, XSSearch     | 用于支持非 UTF-8 字符集        |
| 缓存模块   | WARNING    | XS                       | 用于缓存项目配置文件的解析结果 |
| JSON 扩展  | OK         | util.Quest, util.Indexer | 用于读取或输出 JSON 格式的数据 |
| XML 扩展   | OK         | util.Indexer             | 用于读取导入 XML 格式的数据    |
| MySQL 扩展 | mysqli     | util.Indexer             | 用于读取导入 MySQL 的数据库    |
| SQLite 扩  | sqlite3    | util.Indexer             | 用于读取导入 SQLite 的数据库   |
+------------+------------+--------------------------+--------------------------------+

检查结果
--------

共计 8 项通过,1 项警告,0 项错误。

您的服务器配置符合 Xunsearch/PHP-SDK 的最低要求。
如果您需要使用特定的功能,请关注上述的 WARNING 项。 
[root@cklocalhost www.laravel.com]#


        完全删除 Xunsearch

        首先欢迎对 xunsearch 提出各种修改、改进建议,我们都会认真对待和处理。如果有一天您真的不再需要 xunsearch 了,那么只要停止运行后端服务,然后完全删除它的安装目录 $prefix 即可,整个软件包 所有涉及的文件均在该目录下。

        Note: 如果您的安装目录没有单独设置,而是使用公共目录(如:/usr/local),请勿直接删除整个目录。

$prefix/bin/xs-ctl.sh faststop
rm -fr $prefix


        从 Git 源码仓库安装

        Note: 在开始安装前,无论如何请先安装一次最新发布的完整版本,以便将所有的运行依赖库安装到位。

        我们的源代码托管在 github 上。您可以直接浏览代码仓库,也可以通过以下方式之一取得源代码:

git clone git://github.com/hightman/xunsearch.git
git clone https://github.com/hightman/xunsearch.git

        如果要编译安装这份源代码,您还必须在主机环境上安装相关的 autoconf, automake 工具,然后运行 下面指令完成准备工作。

cd xunsearch/
chmod +x acprep
./acprep

        在完成上述的准备工作后,接下来编译安装 xunsearch 就和常见的开源软件类似,假设您的安装目录为 $prefix,然后按以下步骤操作即可:

./configure --prefix=$prefix
make
make install


        开发流程 

  •         为便于讲解说明,假定 PHP-SDK  代码目录为 $sdk 。

  •         分析搜索需求,设计搜索应用必需的字段。

  •         编写项目配置文件,项目配置 ini  文件存放在 $sdk/app  目录。

  •         引入 $sdk/lib/XS.php  进行搜索功能和界面开发,借助 $sdk/util/*.php  工具进行测试或调试。

        认识对象 

  •         XS  —  搜索项目总对象,所有相关操作均基于此对象及子方法。

  •         XSDocument —  搜索结果或索引文档,包括一组字段及值,相当于 SQL  表中的一条记录。

  •         XSIndex —  索引管理,通过 XS  对象的 index  属性取得。

  •         XSSearch — 搜索功能,通过 XS  对象的 search  属性取得。

  •         XSException —  异常类型,必须捕捉此异常以判断操作是否正确


        基本实践:

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
// 创建对象
$xs = new XS('demo');
// 查询
$docs = $xs->search->search('测试');
// 输出
print_r($docs);

        异常捕获

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk

try{
    $xs = new XS('demo');
    $docs = $xs->search->setQuery('测试')->setLimit(5)->search();    
    foreach ($docs as $doc)
    {        
        echo $doc->rank() . ". " . $doc->subject . " [" . $doc->percent() . "%]\n";        
        echo $doc->message . "\n";
    }
}
catch (XSException $e)
{    
        echo $e;               // 直接输出异常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
            echo "\n" . $e->getTraceAsString() . "\n";
}

        

        XSDocument 文档

docid() 取得搜索结果文档的 docid 值 (实际数据库内的 id,一般用不到)
rank() 取得搜索结果文档的序号值 (第X条结果)
percent() 取得搜索结果文档的匹配百分比 (结果匹配度, 1~100)
weight() 取得搜索结果文档的权重值 (浮点数)
ccount() 取得搜索结果折叠的数量 (按字段折叠搜索时才有效)


        添加操作

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
echo "<pre>";
try
{
    $xs = new XS('demo');
    $doc = new XSDocument();
    $doc->pid = 5;
    $doc->subject = "Hello,XS";
    $doc->message = "Hello,XS内容";
    $res = $xs->index->add($doc)->flushIndex();
    var_dump($res);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
            echo "\n" . $e->getTraceAsString() . "\n";
}
<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
echo "<pre>";
try
{
    $xs  = new XS('demo');
    $doc = new XSDocument();
    $doc->pid = 6;
    $doc->subject = "Hello,XS6";
    $doc->message = "Hello,XS内容6";
    $res = $xs->index->add($doc)->flushIndex();
    var_dump($res);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
     if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}
<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
echo "<pre>";
try
{
    $xs = new XS('demo');
    $doc = new XSDocument();
    $doc->pid = 7;
    $doc->subject = "Hello,XS7";
    $doc->message = "Hello,XS内容7";
    $res = $xs->index->add($doc)->flushIndex();
    var_dump($res);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
     if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}

建立索引的过程会有点延迟!

$index->add($doc)->flushIndex()

可以临时处理成同步的。


    ini初始化配置

string  字符型,适用多数情况,也是默认值
numeric 数值型,包含整型和浮点数,仅当字段需用于以排序或区间检索时才设为该类型,否则请使用 string 即可
date    日期型,形式为 YYYYmmdd 这样固定的 8 字节,如果没有区间检索或排序需求不建议使用
id      主键型,确保每条数据具备唯一值,是索引更新和删除的凭据,每个搜索项目必须有且仅有一个 id 字段,该字段的值不区分大小写
title   标题型,标题或名称字段,至多有一个该类型的字段
body    内容型,主内容字段, 即本搜索项目中内容最长的字段,至多只有一个该类型字段,本字段不支持字段检索

格式:
type = string

/usr/local/xunsearch/sdk/php/app 目录,新建 sample.ini 文件,编辑内容如下:

project.name = sample
project.default_charset = utf-8
server.index = 8383
server.search = 8384

[pid]
type = id

[subject]
type = title

[message]
type = body

[dateline]
type = numeric

[author]
index = both

[authorid]

[tid]
index = self
tokenizer = full

[fid]
index = self
tokenizer = full

[flag]

        更新、修改文档

        如果索引数据库中已存在主键值相同的文档,那么相当于先删除原有的文档,再用当前文档替换它。 如果未存在主键值相同的文档,则效果和添加文档完全一致。

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
echo "<pre>";
try
{
    $xs = new XS('demo');
    $doc = new XSDocument();
    $data = array(
            'pid' => 10, // 此字段为主键,是进行文档替换的唯一标识
            'subject' => '测试文档的标题',
            'message' => '测试文档的内容部分',
            'chrono' => time()
    ); 
    $doc->setFields($data);
    // 更新到索引数据库中
    $res = $xs->index->update($doc)->flushIndex();
    var_dump($res);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
     if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}

        删除文档

        1.按主键删除

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk

// 创建xs
$xs = new XS('demo');
// 创建index
$index = $xs->index;
// 删除
$index->del('1')->flushIndex();

// 删除
$index->del(['4','5'])->flushIndex();

        2.按内容删除

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk

// 创建xs
$xs = new XS('demo');
// 创建index
$index = $xs->index;
// 删除
$index->del('测试','subject')->flushIndex();

此外删除操作和添加文档一样,也是一个异步行为。

        清空索引

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
// 创建xs
$xs = new XS('demo');
// 创建index
$index = $xs->index;
// 删除
$index->clean();

        平滑重建索引

require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
// 创建xs
$xs = new XS('demo');
// 创建index
$index = $xs->index;
// 宣布开始重建索引
$index->beginRebuild();

// 然后在此开始添加数据
$data = array(
    'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识
    'subject' => '测试文档的标题',
    'message' => '测试文档的内容部分',
    'chrono' => time()
);

// 创建文档对象
$doc = new XSDocument;
$doc->setFields($data);

$index->add($doc);


// 告诉服务器重建完比
$index->endRebuild();

        使用索引缓冲区

        一次性提交服务操作

require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk
// 创建xs
$xs = new XS('demo');
// 创建index
$index = $xs->index;

// 开启缓冲区,默认 4MB,如 $index->openBuffer(8) 则表示 8MB
$index->openBuffer();

// 然后在此开始添加数据
$data = array(
    'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识
    'subject' => '测试文档的标题',
    'message' => '测试文档的内容部分',
    'chrono' => time()
);

// 创建文档对象
$doc = new XSDocument;
$doc->setFields($data);
// 在此进行批量的文档添加、修改、删除操作
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);


$index->closeBuffer(); // 关闭缓冲区,必须和 openBuffer 成对使用

        自定义 SCWS 词库

        1.全局自定义词库

$prefix/etc/dict_user.txt
# Custom dictionary for scws (UTF-8 encoding)
# 每行一条记录,以 # 开头的号表示注释忽略
# 每行最多包含 4 个字段,依次代表 "词条" "TF" "IDF" "词性"
# 字段之间用空格或制表符分开,特殊词性 "!" 用于表示删除该词
# 参见 scws 自定义词典帮助:
# http://bbs.xunsearch.com/showthread.php?tid=1303
# $Id$
#
# WORD		TF		IDF		ATTR
# ------------------------------------------------------

        2.项目自定义词库(这个貌似更好的读取)

$prefix/data/项目名称/dict_user.txt


        测试,新建 test.php ,全文检索

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk


$keyword = trim($_REQUEST['keyword']);    // 接收关键词
$xs = new XS('demo');                  // test 为项目名称,配置文件是:/usr/local/xunsearch/sdk/php/app
$search = $xs->search;                 // 获取搜索对象
$search->setLimit(20);
$docs = $search->setQuery( $keyword )->search();  //  搜索 ‘测试’

// echo "<pre>";
echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>id</th><th>姓名</th><th>年领</th></tr>";
foreach ($docs as $doc) {
    $pid      = $doc->pid;
    $message  = $doc->message; 
    $subject  = $doc->subject; //  高亮处理标题
    echo "<tr><td>".$pid."</td><td>".$subject."</td><td>".$message."</td></tr>";
}
echo "</table>";


// $search->setQuery($keyword);
// // 获取前 6 个和默认搜索语句 "西湖" 相关搜索词
// $words = $search->getRelatedQuery();
       // print_r($words);

冷暖自知一抹茶ck






        新建数据库 test, 表test2,添加表数据 

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
+--------------------+
4 rows in set (0.55 sec)
MariaDB [(none)]> create database test2;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| school             |
| test2              |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use test2;
Database changed
MariaDB [test2]> CREATE TABLE `test` (
    ->   `id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `name` varchar(255) DEFAULT NULL,
    ->   `age` int(11) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.17 sec)

MariaDB [test2]> INSERT INTO `test` VALUES ('1', 'aa', '10');
Query OK, 1 row affected (0.00 sec)
MariaDB [test2]> INSERT INTO `test` VALUES ('2', 'bb', '20');
Query OK, 1 row affected (0.00 sec)
MariaDB [test2]> INSERT INTO `test` VALUES ('3', 'cc', '30');
Query OK, 1 row affected (0.00 sec)
MariaDB [test2]> INSERT INTO `test` VALUES ('4', 'dd', '20');
Query OK, 1 row affected (0.00 sec)
MariaDB [test2]> INSERT INTO `test` VALUES ('5', 'ee', '20');
Query OK, 1 row affected (0.00 sec)
MariaDB [test2]> INSERT INTO `test` VALUES ('6', 'ff', '30');
Query OK, 1 row affected (0.00 sec)
MariaDB [test2]>

        新建配置文件 frist.ini

        推荐使用我们的在线工具编写:http://www.xunsearch.com/tools/iniconfig 

[root@cklocalhost ~]#/usr/local/xunsearch/sdk/php/app
[root@cklocalhost app]# vim frist.ini
project.name = frist

project.default_charset = utf-8

server.index = 192.168.142.130:8383
server.search = 192.168.142.130:8384

[id]
type = id

[name]
type = body

[age]
type = numeric

        导入mysql数据到xunsearch里面:对应修改mysql登录用户名和密码

[root@cklocalhost app]# /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://yourdbuser:yourdbpass@127.0.0.1/test2 --sql="select id,name,age from test" --project=frist
[XSErrorException] ../lib/XS.php(2558): fsockopen(): unable to connect to 192.168.142.130:8383 (Connection refused)(2)
#0 [internal function]: xsErrorHandler(2, 'fsockopen(): un...', '/usr/local/xuns...', 2558, Array)
#1 ../lib/XS.php(2558): fsockopen('192.168.142.130', 8383, 111, 'Connection refu...', 5)
#2 ../lib/XS.php(2371): XSServer->connect()
#3 ../lib/XS.php(2356): XSServer->open('192.168.142.130...')
#4 ../lib/XS.php(371): XSServer->__construct('192.168.142.130...', Object(XS))
#5 ../lib/XS.php(263): XS->getIndex()
#6 Indexer.php(157): XSComponent->__get('index')
#7 {main}

        如果 服务端xunsearch 的后台服务已经启动, 报错误 [XSErrorException] ../lib/XS.php(2558): fsockopen(): unable to connect to 192.168.142.130:8383 (Connection refused)(2)

        修改配置文件 frist.ini:

[root@cklocalhost app]# /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://yourdbuser:yourdbpass@127.0.0.1/test2 --sql="select id,name,age from test" --project=frist
开始重建索引 ...
初始化数据源 ... mysql://root:123456@127.0.0.1/test2 
开始批量导入数据 (请直接输入数据) ...
完成索引导入:成功 6 条,失败 0 条
完成重建索引 ...

        Note:在批量导入各种数据源时,您可以加入 --clean 选项,该工具就会先清空现有索引数据库。

/usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://yourdbuser:yourdbpass@127.0.0.1/test2 --sql="select id,name,age from test" --project=frist --clear

        



        获取全文搜索数据

<?php
require '/usr/local/xunsearch/sdk/php/lib/XS.php';//  引入 xunsearch sdk


$keyword = trim($_REQUEST['keyword']);    // 接收关键词
$xs = new XS('frist');                  // test 为项目名称,配置文件是:/usr/local/xunsearch/sdk/php/app
$search = $xs->search;                 // 获取搜索对象
$search->setLimit(20);
$docs = $search->setQuery( $keyword )->search();  //  搜索 ‘测试’

// echo "<pre>";
echo "<table border='1' bordercolor='green' cellspacing='0'><tr><th>id</th><th>姓名</th><th>年领</th></tr>";
foreach ($docs as $doc) {
    $pid      = $doc->id;
    $name  = $doc->name; 
    $age  = $doc->age; //  高亮处理标题
    echo "<tr><td>".$pid."</td><td>".$name."</td><td>".$age."</td></tr>";
}
echo "</table>";

         



参考:

        XunSearch(讯搜)的使用教程步骤:https://blog.csdn.net/flancklin/article/details/52315968




        



冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论