1、Sphinx(coreseek) 是啥

  一般而言,Sphinx是一个独立的全文搜索引擎;而Coreseek是一个支持中文的全文搜索引擎,意图为其他应用提供高速、低空间占用、高结果相关度的中文全文搜索能力。Sphinx/Coreseek可以非常容易的与SQL数据库和脚本语言集成。

也就是说Coreseek可以单独使用,不需要再安装Sphinx


2、从哪里获取

    Sphinx原始版本可以从Sphinx官方网站 http://www.sphinxsearch.com/,Coreseek可以从Coreseek官方网站 http://www.coreseek.cn/下载.


3、主要特性

目前,Sphinx/Coreseek的发布包包括如下软件:

  • indexer: 用于创建全文索引;
  • search: 一个简单的命令行(CLI) 的测试程序,用于测试全文索引;
  • searchd: 一个守护进程,其他软件可以通过这个守护进程进行全文检索;
  • sphinxapi: 一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, Java).
  • spelldump: 一个简单的命令行工具,用于从 ispell 或 MySpell (OpenOffice内置绑定) 格式的字典中提取词条。当使用 wordforms 时可用这些词条对索引进行定制.
  • indextool: 工具程序,用来转储关于索引的多项调试信息。 此工具是从版本Coreseek 3.1(Sphinx 0.9.9-rc2)开始加入的。
  • mmseg: 工具程序和库,Coreseek用于提供中文分词和词典处理。

4、安装Coreseek

1)将你下载的tar包解压,并进入coreseek 子目录:

$ tar xzvf coreseek-3.2..tar.gz
$ cd coreseek

2)首先安装MMSeg:

$ cd mmseg

$ ./configure --prefix=/usr/local/mmseg

$ make

$ make install

$ cd ..

3)运行配置程序:

$ ./configure

configure程序有很多运行选项。完整的列表可以通过使用 --help 开关得到。最重要的如下:

  • --prefix, 定义将Coreseek安装到何处;比如 --prefix=/usr/local/coreseek (以下全部示例都假定Coreseek安装在这个位置)
  • --with-mysql, 当自动检测失败时,指出在那里能找到MySQL 头文件和库文件;
  • --with-pgsql, 指出在那里能找到PostgreSQL头文件和库文件.
  • --with-mmseg, 启用基于MMSeg的中文分词法,并指出在那里能找到MMSeg头文件和库文件.
  • --with-python, 启用Python数据源支持. 需要预先安装Python2.6.

4)编译源代码生成二进制程序:

$ make

$ make install

5、Coreseek快速配置

1)创建配置文件.

缺省的配置文件名为 csft.conf. 全部的Sphinx/Coreseek提供的程序默认都在当前工作的目录下寻找该文件.

configure 程序生成的示例配置文件sphinx.conf.dist 中包括全部选项的注释,复制并编辑这个文件使之适用于你的具体情况: (请确认 Sphinx/Coreseek 安装在 /usr/local/coreseek/)

$ cd /usr/local/coreseek/etc
$ cp sphinx.conf.dist csft.conf
$ vi csft.conf

coreseek配置文件解析:

  • source:数据源,数据是从什么地方来的。
  • index:索引,当有数据源之后,从数据源处构建索引。索引实际上就是相当于一个字典检索。有了整本字典内容以后,才会有字典检索。
  • searchd:提供搜索查询服务。它一般是以deamon的形式运行在后台的。
  • indexer:构建索引的服务。当要重新构建索引的时候,就是调用indexer这个命令。
  • attr:属性,属性是存在索引中的,它不进行全文索引,但是可以用于过滤和排序。

具体配置源信息,请见官方文档:http://www.coreseek.com/products-install/datasource/

#源定义
source xml
{
type = xmlpipe2
xmlpipe_command = bin\cat var/test/test.xml #此处也可使用其他可执行程序输出xml数据
} #index定义
index xml
{
source = xml #对应的source名称
path = var/data/xml
docinfo = extern
mlock =
morphology = none
min_word_len =
html_strip =
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
charset_dictpath = etc/ #Windows环境下设置,/符号结尾
charset_type = zh_cn.utf-
}

2)运行indexer 为你的数据创建全文索引:

$ cd /usr/local/coreseek/etc
$ /usr/local/coreseek/bin/indexer --all

3)测试索引:

$ cd /usr/local/coreseek/etc
$ /usr/local/coreseek/bin/search test

或者

/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/csft.conf  测试索引

6、通过PHP代码调用索引

1)运行守护进程searchd,PHP脚本需要连接到searchd上进行检索:

$ cd /usr/local/coreseek/etc
$ /usr/local/coreseek/bin/searchd

2)运行PHP API 附带的test 脚本(运行之前请确认searchd守护进程已启动):

$ cd /源代码目录/coreseek/api
$ php test.php test

当然,这是直接包含coreseek的api接口文件的方式来调用索引,还可以通过安装 sphinx的php扩展来调用(不过客户端版本和服务端版本要保持一致

测试代码为:

$sphinx = new SphinxClient();
$sphinx->SetServer ( 'x.x.x.x', 9312 );
$sphinx->SetArrayResult ( true );//设置返回结果集为php数组格式
// $sphinx->SetLimits(0, 20, 1000);//匹配结果的偏移量,参数的意义依次为:起始位置,返回结果条数,最大匹配条数 //最大搜索时间
// $sphinx->SetMaxQueryTime(10); //索引源是配置文件中的 index 类,如果有多个索引源可使用,号隔开:'email,diary' 或者使用'*'号代表全部索引源
$index = 'index';
$sphinx->setMatchMode(SPH_MATCH_ALL);
// $sphinx->setMaxQueryTime(30); //设置最大搜索时间
// $sphinx->SetArrayResult(false); //是否将Matches的key用ID代替
// $sphinx->SetSelect ( "*" ); //设置返回信息的内容,等同于SQL
// $sphinx->SetRankingMode(SPH_RANK_BM25); //设置评分模式,SPH_RANK_BM25可能使包含多个词的查询的结果质量下降。 $result = $sphinx->query("测试", $index);
$err = $sphinx->GetLastError(); echo '<pre>';
print_r($result);
print_r($err);
echo '</pre>';

6、扩展词库

虽然coreseek自带了中文词库,但是毕竟只是基础词库,如果我们需要一些行业词库,则可以自己扩展词库。

1)首先要到搜狗下载词库:http://pinyin.sogou.com/dict/

2)转换词库为文本文件

网上找一个搜狗转 google的小工具,用它把你下载的全部词库转成文本文件, 生成为一个文件命名为words.txt。文件要用utf8编码保存。

如果你想自己转换请参考官网上的方法:http://www.coreseek.cn/opensource/mmseg/

3)转换文本文件为 词库格式

现在我们有了一个初步的词库,但这个词库还不能直接使用,要再整理并转换coreseek使用的格式才行,通过PHP代码来转换

ini_set('display_errors', 'On');
error_reporting(E_ALL);
date_default_timezone_set ('Asia/Shanghai');
set_time_limit(0); $buffer = ini_get('output_buffering');
if($buffer){
ob_end_flush();
} echo '处理新词库...'.PHP_EOL;
flush();
$filename = "words.txt";
$handle = fopen ($filename, "r");
$content = fread ($handle, filesize ($filename));
fclose ($handle); $content = trim($content);
$arr1 = explode( "\r\n" ,$content );
$arr1 = array_flip(array_flip($arr1)); foreach($arr1 as $key=>$value){ $value = dealchinese($value);
if(!empty($value)){
$arr1[$key] = $value;
}else{
unset($arr1[$key]);
}
} echo '处理原来词库...'.PHP_EOL;
flush();
$filename2 = "unigram.txt";
$handle2 = fopen ($filename2, "r");
$content2 = fread ($handle2, filesize ($filename2));
fclose ($handle2);
$content2 = dealchinese($content2,"\r\n");
$arr2 = explode( "\r\n" ,$content2 );
echo '删除相同词条...'.PHP_EOL;
flush();
$array_diff = array_diff($arr1,$arr2); echo '格式化词库...'.PHP_EOL;
flush();
$words='';
foreach($array_diff as $k => $word){
$words .= $word."\t1".PHP_EOL."x:1".PHP_EOL;
}
//echo $words;
file_put_contents('words_new.txt',$words,FILE_APPEND);
echo 'done!'; function dealChinese($str, $join=''){
preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches); //将中文字符全部匹配出来
$str = join($join, $matches[0]); //从匹配结果中重新组合
return $str;
}

4)生成新的词库

运行完后会在相同目录下生产 words_new.txt把这个文件加到原unigram.txt的后面,保存备用.

把上面得到的文件unigram.txt复制到/usr/local/mmseg-3.2.14/etc/

cd  /usr/local/mmseg-3.2./etc/
/usr/local/mmseg-3.2./bin/mmseg -u unigram.txt

该命令执行后,将会在unigram.txt所在目录中产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。

5)测试新的词库

新建测试文件 test.txt,里面写入你要测试的文本

/usr/local/mmseg-3.2./bin/mmseg -d  /usr/local/mmseg-3.2./etc/ test.txt

也就是

mmseg -d <dict_dir> test.txt

其中,命令使用‘-d’开关指定词库文件所在的位置,参数dict_dir为词库文件(uni.lib )所在的目录;text.txt 为待切分的文本文件,必须为UTF-8编码。如果一切正确,mmseg会将切分结果以及所花费的时间显示到标准输出上。

7、coreseek常用命令

启动
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf
停止
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf --stop
建立索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all
重建索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate

Sphinx(coreseek) 安装使用以及词库的扩展的更多相关文章

  1. sphinx,coreseek安装

    sphinx是国外的一款搜索软件. coreseek是在sphinx的基础上,增加了中文分词功能,换句话说,就是支持了中文. Coreseek发布了3.2.14版本和4.1版本,其中的3.2.14版本 ...

  2. Sphinx(Coreseek)安装和使用指南

    1.安装 1.1安装mmseg ./bootstrap # 必须执行,不然安装会失败 ./configure --prefix=/usr/local/mmseg- #指定安装目录 make make ...

  3. paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.

    paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库. mmseg默认词库只能是文件格式...不好维护..要是不个词库放的个数据库里面走好维护兰.. 要实现2个目标..: 1 ...

  4. 【PHP高效搜索专题(1)】sphinx&Coreseek的介绍与安装

    我们已经知道mysql中带有"%keyword%"条件的sql是不走索引的,而不走索引的sql在大数据量+大并发量的时候,不仅效率极慢还很有可能让数据库崩溃.那我们如何通过某些关键 ...

  5. (转载)Windows下小狼毫输入法(Rime)的安装与配置(含导入搜狗词库)

    div id="cnblogs_post_body" class="blogpost-body"> 最近彻底烦透了搜狗拼音输入法的各种流氓行为,自动升级不 ...

  6. Elementary OS 使用fcitx安装搜狗词库、搜狗输入法(Linux通用)

    刚开始接触Linux的小伙伴可能比较懵逼,我要使用ibus输入法还是fcitx(小企鹅)输入法,其实这两种都不能说是输入法,Linux中输入法的使用是依赖于输入法框架的,其中搜狗输入法和百度输入法都是 ...

  7. CentOS安装搜狗词库

    中文输入使用ibus-pinyin. 在ibus-pinyin里使用搜狗词库 # wget http://hslinuxextra.googlecode.com/files/sougou-phrase ...

  8. coreseek安装

    一.  Sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与 ...

  9. Sphinx学习之sphinx的安装篇

    一.  Sphinx简介 Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与 ...

随机推荐

  1. C#课外实践——校园二手平台(技术篇1)

    前面分享了这次的课外实践的心得,这次,就分享一下从这次的课外实践的过程中学到的知识技能吧.虽然有句话说的好,不要做没有准备的战争,但是,我想说的是,生活中有很多的事情是不允许我们有准备的.遇到事情必须 ...

  2. my linux tech object

    I want to be a linux kernel development engineer. That's my dream.

  3. paip.提升性能---协程“微线程”的使用.

    paip.提升性能---协程的使用. 近乎无限并发的"微线程" 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:h ...

  4. atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表

    atitit.) ---数据挖掘 获取回收站文件列表 1. 放入回收站的原理and 1 2. info2文件文件结构 1 3. 获得文件列表2个法: 正则表达式or解析 1 4. 路径正则表达式[a- ...

  5. 通过MSSQL连接服务器连接至Oracle数据库

    前言 有很多时候,我们需要MSSQL与Oracle进行跨库查询或数据交互.本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库,并且读取数据的示例. 具体步骤 首先需要到Oracle的 ...

  6. MySQL完整性语言

    文章为作者原创,未经许可,禁止转载.    -Sun Yat-sen University 冯兴伟 实验3:完整性语言 完整性语言实验包含3个实验项目,其中2个必修项目,1个选修项目.该实验的各个实验 ...

  7. Android的消息机制: Message/MessageQueue/Handler/Looper

    概览   * Message:消息.消息里面可包含简单数据.Object和Bundle,还可以包含一个Runnable(实际上可看做回调). * MessageQueue:消息队列,供Looper线程 ...

  8. Revit中将倾斜轴线显示为正交模式

    Revit建模过程中有时候会遇到某些特殊的建筑不规则建筑或者其轴线视图中并非正交二是倾斜的情况,用Revit建模过程中对于倾斜的建筑不仅不符合人的视觉习惯,而且也会对后期的机电管线的布设造成困扰,稍不 ...

  9. 努力学习 HTML5 (3)—— 改造传统的 HTML 页面

    要了解和熟悉 HTML5 中的新的语义元素,最好的方式就是拿一经典的 HTML 文档作例子,然后把 HTML5 的一些新鲜营养充实进入.如下就是我们要改造的页面,该页面很简单,只包含一篇文章. Apo ...

  10. how to read from __consumer_offsets topic

    来自:http://grokbase.com/t/kafka/users/15bs2r0m83/kafka-0-8-2-1-how-to-read-from-consumer-offsets-topi ...