全文搜索引擎-sphinx及xunsearch

使用全文搜索引擎

站内搜索类型

1、sphinx(斯芬克斯) sphinx不支持中文, coreseek(基于sphinx,并且支持中文)

2、lucene java支持好,为php也提供方法

3、xunsearch(迅搜) 国产、仅支持php

sphinx的使用

优点:
  高速的建立索引可达到10M/s
  高性能的搜索(在2-4G的文本数据上,平均每次检索响应的时间小于0.1秒)
  可处理海量数据(目前已知可以处理100G的文本数据,在单一的CPU的系统上可处理100M的文档)
  提供的优秀的相关度算法,基于短语相似度和统计BM2的复合Ranking的方法
  支持分布式搜索
  提供文档片段生成功能
  可作为Mysql的存储引擎提供搜索服务
  支持布尔,短语,词语相似度等多种检索模式
缺点:
 必须要有主键
 主键必须为整数
 不负责数据存储
 配置不灵活

不多说,直接上案例:

1.下载好sphinx工具,解压目录如下:


image

2.将sphinx-min.conf.in文件改名为sphinx.conf并移动到bin文件夹中

编辑该文件配置如下:

source src1
{
    type            = mysql

    sql_host        = localhost #主机地址
    sql_user        = root#帐号
    sql_pass        =     #密码
    sql_db          = oneshop  #数据库
    sql_port        = 3306  # 数据库端口 3306
    sql_query       = SELECT id, name, tel FROM one_user #查询语句
    sql_attr_uint       = group_id
    sql_attr_timestamp  = date_added
    sql_query_pre = set names utf8   #数据库编码
}


index test1
{
    source          = src1
    path            = D:/xampp/htdocs/sphinx/data #这个一定要配置
    charset_type = utf-8 #指定编码
    ngram_len = 1        #要找中文需指定为1.
    ngram_chars = U+3000..U+2FA1F
    
}

indexer
{
    mem_limit       = 128M
}

searchd
{
    listen          = 9312
    listen          = 9306:mysql41
    log         = D:\xampp\htdocs\sphinx\log\searchd.log  #进程日志
    query_log       = D:\xampp\htdocs\sphinx\log\query.log    #查询日志

    read_timeout        = 5
    max_children        = 30
    pid_file        = D:\xampp\htdocs\sphinx\log\searchd.pid 
    seamless_rotate     = 1
    preopen_indexes     = 1
    unlink_old      = 1
    workers         = threads # for RT to work
    binlog_path     =D:\xampp\htdocs\sphinx\data
}

3.生成查询索引 (coreseek 默认为index.php同目录下的csft.conf)
语法:index [-c 配置文件 --all或者索引源名称


image

4.安装searchd服务:(注意要以管理员的形式打开cmd 否则code5)

image

5.加载配置文件


image

6.启动


image

7.开始运行代码,我将该test2.php放在\share\doc下,如下:

SetServer('localhost',9312);
$result = $s->Query('huang123');
echo '
';
print_r($result);

?>
image

image

8.返回的是主键id ,仍需根据id去查询数据

由于数据量太少了,这里就不比较速度了

代码部分:

从php手册中可以查到SphinxClient的用法:

1.实例化

$sphinx = new SphinxClient();

2.连接Sphinx服务器(searchd服务)

$sphinx -> setServer(‘localhost’,9312);

3.Query方法搜索关键词,结果是数组,其中matches存储的是检索到的记录

 $result = $s->query('huang123',*);
image
//通过array_keys()函数,可以提取这些id
$ids=array_keys($result['matches']);

//查询
if($ids){
    $ids=implode(',',$ids);
    ...
}       

4.Sphinx匹配模式

SPH_MATCH_ALL :匹配所有查询词(默认),完全匹配所有的词

SPH_MATCH_ANY:匹配查询词中的任意一个。匹配任意一个词

SPH_MATCH_PHRASE:将整个查询词看做一个词组,要完全匹配 相当于like

SPH_MATCH_BOOLEAN : 将查询看作一个布尔表达式 | & or  ! 例(“妈妈|爸爸”)

SPH_MATCH_EXTENDED2 : 查询看做一个sphinx的表达式
如:@name hjy @tel 1379532142  @ 字段 查询

延伸阅读:

Coreseek/Sphinx增量索引使用详解 http://xiaobu.duapp.com/index.php/2016/07/31/30/

xunsearch

bin/xs-ctl.sh restart 最好将此命令写入 /etc/rc.local 重启自启动

需要一个定时脚本,将需要检索的MySQL数据导入、更新到xunSearch里:
usr/local/php/bin/php /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://你的数据库用户名:你的数据库密码@你的数
据库IP/你的数据库名 --sql="你要执行的SQL语句" --filter=debug --project=你的项目名;

保存数据文件的目录:project ;
project表示不同的项目数据目录

配置文件数据类型

image

代码部分:

ini_set('display_errors' , 'On');  

require '/usr/local/xunsearch/sdk/php/lib/XS.php';   //  引入 xunsearch sdk  
$xs = new XS('/usr/local/xunsearch/sdk/php/app/demo.ini');    // demo  为项目名称,配置文件是:$sdk/app/demo.ini  
  
$search = $xs->search;  
  
$query = 'hjy'; // 这里的搜索语句很简单,就一个短语  
  
$search->setFuzzy(); //设置模糊搜索  
$search->setQuery($query); // 设置搜索语句  
  
$search->setLimit( 100 );  
$docs = $search->search(); // 执行搜索,将搜索结果文档保存在 $docs 数组中  
var_dump($docs);  
$count = $search->count(); // 获取搜索结果的匹配总数估算值  
echo '
'; var_dump($count);

你可能感兴趣的:(全文搜索引擎-sphinx及xunsearch)