⑴ sphinx 和coreseek 有什么区别
然后重新运行aclocal和autoconf
aclocal && autoconf
最后再次运行automake
automake
然后继续mmseg的安装
./configure --prefix=/usr/local/mmseg
make && make install
如果make 报错
There is an easy fix when you get such messages as "X--tag=CXX: command not found".
Just type:
export echo=echo
And try again.
所以输入
export echo=echo
然后再次运行安装
make && make install
安装csft
./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install
安装完毕后 注意 coreseek 中的配置文件也是csft.conf 而不是 sphinx.conf
cd /usr/local/coreseek/etc
cp sphinx.conf.dist csft.conf
vim csft.conf
有些配置改动如下其他配置内容如上文的sphinx.conf
在索引源中注释掉txt
index main{
#stopwords = G:datastopwords.txt
#wordforms =G:datawordforms.txt
#exceptions =/data/exceptions.txt
#charset_type = sbcs
#添加下面2行 意思是把中文分词加入到配置文件中
char_type = zh_cn.utf-8
charset_dictpath =/usr/local/mmseg/etc/ #你安装mmseg的目录
}
保存配置
建立索引
cd /usr/local/coreseek/bin
./indexer --all
./search 中文词缀
如何用php去使用sphinx
Sphinx集成到php程序中有两种方式
⑵ php 一般使用什么中文分词扩展
Robbe是建立在Friso中文分词器上的一个高性能php中文分词扩展,除了提供了基本的分词函数以外,还提供一些编码转换函。
Robbe完整版本(PHP测试程序, 开发帮助文档, WinNT下php各版本的dll文件)下载:code.google.com/p/robbe
一. 关于Robbe:
robbe是建立在friso中文分词上的一个高性能php中文分词扩展。了解friso
1.目前最高版本:friso 1.6.0,【源码无需修改即可在各平台下编译运行】
2.mmseg四种过滤算法,分词准确率达到了98.41%。
3.详细功能,请访问friso官方首页:friso [code.google.com/p/friso]
二. Robbe分词速度:
测试环境:2.8GHZ/2G/Ubuntu
简单模式:3.1M/秒
复杂模式:1.4M/秒
(因为php中的大量字符串的复制,性能比friso有些下降)。
⑶ coreseek 安装完成后 怎么调用接口
然后重新运行aclocal和autoconf
aclocal && autoconf
最后再次运行automake
automake
然后继续mmseg的安装
./configure --prefix=/usr/local/mmseg
make && make install
如果make 报错
There is an easy fix when you get such messages as "X--tag=CXX: command not found".
Just type:
export echo=echo
And try again.
所以输入
export echo=echo
然后再次运行安装
make && make install
安装csft
./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install
安装完毕后 注意 coreseek 中的配置文件也是csft.conf 而不是 sphinx.conf
cd /usr/local/coreseek/etc
cp sphinx.conf.dist csft.conf
vim csft.conf
有些配置改动如下其他配置内容如上文的sphinx.conf
在索引源中注释掉txt
index main{
#stopwords = G:\data\stopwords.txt
#wordforms =G:\data\wordforms.txt
#exceptions =/data/exceptions.txt
#charset_type = sbcs
#添加下面2行 意思是把中文分词加入到配置文件中
char_type = zh_cn.utf-8
charset_dictpath =/usr/local/mmseg/etc/ #你安装mmseg的目录
}
保存配置
建立索引
cd /usr/local/coreseek/bin
./indexer --all
./search 中文词缀
如何用php去使用sphinx
Sphinx集成到php程序中有两种方式
1.Sphinx php 模块(这次我们选择使用的方式)
2.Sphinx api 类(位于coreseek源码包里的csft里的api文件夹里有一个sphinxapi.php,使用的时候包含这个php文件即可)
我们要使用sphinx需要做以下几件事:
1.首先要有数据
2.建立sphinx配置文件
3.生成索引
4,启动searchd 服务进程,并开启端口9312
5.用php客户程序去链接sphinx服务
/usr/local/coreseek/bin/searchd
启动进程命令 searchd
-c 指定配置文件
--stop 停止服务
--pidfile 显示指定pid文件
-p 指定端口(默认9312)
注意:这里启动的服务是searchd
使用php sphinx的模块
下载 sphinx-1.1.0.tgz
tar zvxf sphinx-1.1.0.tgz
cd sphinx-1.1.0
/usr/local/php/bin/phpize #用于生成一个configure的脚本
进入coreseek源码包的csft/api/libsphinxclent 目录下执行configure
./configure
make && make install
进入sphinx-1.1.0.gzt的源码包目录下 执行configure用于生成so 的shpinx模块
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-sphinx
make && make install
安装成功后会有提示
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ (这个目录是sphinx.so所在的目录)
然后我们编辑php的ini文件 在extension中加入
extension=sphinx.so
然后重启nginx和php的服务
最后打印一下phpinfo 查看sphinx是否开启成功
如果成功开启 就可以使用php手册里的sphinx的方法和代码了
⑷ friso 怎样在mysql中使用
friso 怎样在mysql中使用
C/C++ code?
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
37
38
39
40
41
#include "friso/friso.h"
#include "friso/friso_API.h"
friso_t friso;
friso_task_t task;
typedef friso_t(*pfun_friso_new_from_ifile)(string);
typedef friso_task_t(*pfun_friso_new_task)();
typedef void(*pfun_friso_set_text)(friso_task_t,string);
typedef friso_hits_t(*pfun_friso_next)(friso_t,friso_mode_t,friso_task_t);
typedef void(*pfun_friso_free_task)(friso_task_t);
typedef void(*pfun_friso_free)(friso_t);
HINSTANCE hdll = LoadLibrary("friso\\friso.dll");
pfun_friso_new_from_ifile newfriso = (pfun_friso_new_from_ifile)GetProcAddress(hdll,"friso_new_from_ifile");
pfun_friso_new_task newtask = (pfun_friso_new_task)GetProcAddress(hdll,"friso_new_task");
pfun_friso_set_text frisosettext = (pfun_friso_set_text)GetProcAddress(hdll,"friso_set_text");
pfun_friso_next frisonext = (pfun_friso_next)GetProcAddress(hdll,"friso_next");
pfun_friso_free_task freetask = (pfun_friso_free_task)GetProcAddress(hdll,"friso_free_task");
pfun_friso_free freefriso = (pfun_friso_free)GetProcAddress(hdll,"friso_free");
LPSTR ini = "friso\\friso.ini";
friso = newfriso(ini);
task = newtask();
LPSTR txt = "测试:friso是使用c语言开发的一个中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入到其他程序中,例如:MySQL,PHP等。 ";
frisosettext(task,txt);
while((frisonext(friso,friso->mode,task))!=NULL)
{
OutputDebugString(task->hits->word);//第一次的输出竟然不是“测试”而是“friso”
OutputDebugString(" ");
if(task->hits->type==__FRISO_NEW_WORDS__)
{
//第一次运行到这里就除错
//错误提示:HEAP[fenci.exe]: Invalid Address specified to RtlValidateHeap( 00030000, 003954D0 )
FRISO_FREE(task->hits->word);
}
}
OutputDebugString("\r\n");
freetask(task);
freefriso(friso);
⑸ mmseg 怎么应用在php上
你这样试试呢usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ 如何用php去使用sphinx Sphinx集成到php程序中有两种方式 Sphinx php你也可以去后盾人看看php基础教学视频看看,也是不错的选择,希望能帮到你,给个采纳吧谢谢
⑹ 如何使用织梦DedeCMS v5.7全文检索说明
1.1.开始前的准备工作
先从http://www.coreseek.cn/procts/ft_down/下载Coreseek 3.2.13,这里我们就以Windows环境为例:
下载后直接解压coreseek-3.2.13-win32.zip,我们这里假设解压到:D:\coreseek-3.2.13-win32.这里我们需要简单了解几个目录:
[D:\coreseek-3.2.13-win32\api]API接口目录,其中包括了php,python,ruby等操作实例,其中test_coreseek.php是一个不错的中文检索的例子.
[D:\****\bin]应用程序目录,其中包含以下几个文件
* indexer: 用于创建全文索引;
* search: 一个简单的命令行(CLI) 的测试程序,用于测试全文索引;
* searchd: 一个守护进程,其他软件可以通过这个守护进程进行全文检索;
* sphinxapi: 一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, java).
* spellmp: 一个简单的命令行工具,用于从 ispell 或 MySpell (OpenOffice内置绑定) 格式的字典中提取词条。当使用 wordforms 时可用这些词条对索引进行定制.
* indextool: 工具程序,用来转储关于索引的多项调试信息。 此工具是从版本Coreseek 3.1(Sphinx 0.9.9-rc2)开始加入的。
* mmseg: 工具程序和库,Coreseek用于提供中文分词和词典处理。
[D:\****\etc]sphinx配置目录
[D:\****\var]sphinx变量&索引&日志存放目录
1.2.创建配置文件
由于dedecms使用的是mysql,所以我们需要来配置一个mysql的sphinx模板配置,可以复制csft_mysql.conf改名为:csft_dedecmsv57.conf,例如我们这里仅做文章的全文检索,我们需要做如下配置:
先在DedeCMS中创建一个统计表,方法可以在DedeCMS后台[系统]->[SQL命令行工具]中执行下列代码:
CREATE TABLE `dede_sphinx` (
`countid` int(11) unsigned NOT NULL,
`maxaid` int(11) unsigned NOT NULL,
PRIMARY KEY (`countid`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk
这是一个sphinx内容统计表,为了适合数据量较大的情况下分批生成索引而使用的.
创建完数据表后,我们对sphinx的配置文件,即csft_dedecmsv57.conf修改,内容如下,其中包含注释:
--------------------------------------------------------------------------------------------
#源定义
source mysql
{
type = mysql
# 数据库服务器基本配置信息
sql_host = 192.168.0.103
sql_user = dedev57
sql_pass = dedecms
sql_db = dedecmsv57gbk
sql_port = 3306
# 设定编码,这里我们是gbk编码,如果是utf-8,可以设置:
# sql_query_pre = SET NAMES utf8
sql_query_pre = SET NAMES gbk
# 数据检索增量
sql_range_step = 1000
#当前最新文档id数
sql_query_pre = REPLACE INTO dede_sphinx SELECT 1, MAX(id) FROM dede_archives
#检索条件
sql_query = SELECT ARC.id,ARC.typeid,ARC.typeid2,ARC.sortrank,ARC.flag,ARC.channel,ARC.ismake,ARC.arcrank,ARC.click,ARC.title,ARC.shorttitle,ARC.color,ARC.writer,ARC.source,ARC.litpic,ARC.pubdate,ARC.senddate,ARC.mtype,ARC.description,ARC.badpost,ARC.goodpost,ARC.scores,ARC.lastpost,ARC.keywords,ARC.mid,ART.body FROM dede_archives AS ARC LEFT JOIN dede_addonarticle AS ART ON ARC.id = ART.aid WHERE ARC.id>=$start AND ARC.id<=$end #sql_query第一列id需为整数
#title、body作为字符串/文本字段,被全文索引http://www.dede58.com/a/dedeaz/1678.html
⑺ 如何查看coreseek的版本
然后重新运行aclocal和autoconf
aclocal && autoconf
最后再次运行automake
automake
然后继续mmseg的安装
./configure --prefix=/usr/local/mmseg
make && make install
如果make 报错
There is an easy fix when you get such messages as "X--tag=CXX: command not found".
Just type:
export echo=echo
And try again.
所以输入
export echo=echo
然后再次运行安装
make && make install
安装csft
./configure --prefix=/usr/local/coreseek --with-mysql=/usr/local/mysql --with-mmseg=/usr/local/mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/
make && make install
安装完毕后 注意 coreseek 中的配置文件也是csft.conf 而不是 sphinx.conf
cd /usr/local/coreseek/etc
cp sphinx.conf.dist csft.conf
vim csft.conf
有些配置改动如下其他配置内容如上文的sphinx.conf
在索引源中注释掉txt
index main{
#stopwords = G:datastopwords.txt
#wordforms =G:datawordforms.txt
#exceptions =/data/exceptions.txt
#charset_type = sbcs
#添加下面2行 意思是把中文分词加入到配置文件中
char_type = zh_cn.utf-8
charset_dictpath =/usr/local/mmseg/etc/ #你安装mmseg的目录
}
保存配置
建立索引
cd /usr/local/coreseek/bin
./indexer --all
./search 中文词缀
如何用php去使用sphinx
Sphinx集成到php程序中有两种方式
Sphinx php 模块(这次我们选择使用的方式)
2.Sphinx api 类(位于coreseek源码包里的csft里的api文件夹里有一个sphinxapi.php,使用的时候包含这个php文件即可)
我们要使用sphinx需要做以下几件事:
首先要有数据
2.建立sphinx配置文件
3.生成索引
4,启动searchd 服务进程,并开启端口9312
5.用php客户程序去链接sphinx服务
/usr/local/coreseek/bin/searchd
启动进程命令 searchd
-c 指定配置文件
--stop 停止服务
--pidfile 显示指定pid文件
-p 指定端口(默认9312)
注意:这里启动的服务是searchd
使用php sphinx的模块
下载 sphinx-1.1.0.tgz
tar zvxf sphinx-1.1.0.tgz
cd sphinx-1.1.0
/usr/local/php/bin/phpize #用于生成一个configure的脚本
进入coreseek源码包的csft/api/libsphinxclent 目录下执行configure
./configure
make && make install
进入sphinx-1.1.0.gzt的源码包目录下 执行configure用于生成so 的shpinx模块
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-sphinx
make && make install
安装成功后会有提示
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ (这个目录是sphinx.so所在的目录)
然后我们编辑php的ini文件 在extension中加入
extension=sphinx.so
然后重启nginx和php的服务
最后打印一下phpinfo 查看sphinx是否开启成功
如果成功开启 就可以使用php手册里的sphinx的方法和代码了
⑻ 在thinkphp下怎么使用coreseek
首先我们把coreseek下载好,命名为coreseek,我们找到coreseek/etc中的csft_mysql.conf修改这个配置文件。
#源定义
source lemai
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = 123
sql_db = lemai
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title,content,name FROM shop
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
sql_attr_uint = sid #从SQL读取到的值必须为整数
sql_attr_timestamp = time #从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM shop WHERE name=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index lemai
{
source = lemai #对应的source名称
path = var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
#中文分词配置,详情请查看:http://www.coreseek.cn/procts-install/coreseek_mmseg/
#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、linux环境下设置,/符号结尾
charset_dictpath = C:/AppServ/www/thinkphp/ThinkPHP/Extend/Vendor/Coreseek/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type = zh_cn.utf-8
#charset_table =
ngram_len = 0
}
#全局index定义
indexer
{
mem_limit = 128M
}
#searchd服务定义
searchd
{
listen = 9312
read_timeout = 5
max_children = 30
max_matches = 1000
seamless_rotate = 0
preopen_indexes = 0
unlink_old = 1
pid_file = var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log = var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log = var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}
然后把coreseek拷贝一份到thinkphp的核心文件Extend/Vendor下.
打开cmd cd到coreseek
bin\indexer -c etc\csft_mysql.conf (mysql,等)数据库名 创建索引
创建完之后我们可以在var\data下看到一堆文件,此时说明创建成功
bin\searchd -c etc\csft_mysql.conf --console 启动进程
(检查端口9312是否有这个进程,有就OK)
命令行查询
echo 一号店 |iconv -f gbk -t utf-8 | search -c etc\csft_mysql.conf --stdin | iconv -f utf-8 -t gbk 中文索引查询
然后就可以在控制器中进行PHP连接sphinxapi进行测试了
Vendor('Coreseek.api.sphinxapi');
//加载第三方扩展包的文件 文件名不包含class
$db = new PDO('mysql:host=localhost;port=3306;dbname=lemai', 'root', '123', array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
//实例化PDO
$spx = new SphinxClient();
//实例化SphinxClient
$spx -> SetServer('127.0.0.1',9312);
$spx->SetConnectTimeout ( 3 );
$spx->SetArrayResult ( true );
$spx -> SetMatchMode(SPH_MATCH_ANY);
$result = $spx -> query('1','*');
$ids = join(",",array_keys($result['matches']));
$sql = "SELECT * FROM shop where id in ({$ids})";
$stmt = $db->query($sql);
$r = $stmt->FETCHALL(PDO::FETCH_ASSOC);
echo "<pre>";
var_mp($r);
以下是我的实例代码 包括sphinx分页
class IndexAction extends Action {
public function index(){
header("Content-type:text/html;charset=utf-8");
//设置字符集
$keyword = $_GET['kw'];
Vendor('Coreseek.api.sphinxapi');
//加载第三方扩展包的文件 文件名不包含class
$db = M();
$spx = new SphinxClient();
//实例化SphinxClient
$spx -> SetServer('127.0.0.1',9312);
//设置ip和端口
$spx->SetConnectTimeout ( 3 );
//设置超时时间
$spx->SetArrayResult ( true );
if(strlen($keyword)>=18){
$spx -> SetMatchMode(SPH_MATCH_ALL);//如果用户查询字符大于=18个匹配有查询词
}else{
$spx -> SetMatchMode(SPH_MATCH_ANY);//匹配查询词中的任意一个
}
//------
$limit = 12;//每页要显示的数量
$page = $_GET['page']>1 ? $_GET['page'] : 1;
//GET值不为1 则按1算
//$spx->setLimits(0,12);
$off = ($page-1)*$limit;
$spx->SetLimits( $off, $limit);
//设置分页
$result = $spx -> query("{$keyword}",'*');
/*
* 取出matches中的id,组成字符串
*/
$str = '';
foreach($result['matches'] as $rrs){
$str.=$rrs['id'].',';
}
$ids = rtrim($str,',');
//操作数据库
$sql = "SELECT * FROM shop where id in ({$ids})";
$stmt = $db->query($sql);
$opts = array(
"before_match"=>"<span style='color:red'>",//添加样式
"after_match"=>"</span>"
);
foreach($stmt as $st){
$shop_all[] = $spx->buildExcerpts($st,'lemai',$keyword,$opts);
}
$num = $result['total'];
$count =ceil($result['total']/12);//查出sphinx搜索总数 得出该关键词分页数
$pagenum = $_GET['page']>1?$_GET['page']:1;
$this->assign('pagenum',$pagenum);
$this->assign('num',$num);
$this->assign('count',$count);
$this->assign('shop_all',$shop_all);
$this->assign('keyword',$keyword);
$this->display("seek");
}
}
⑼ 中文分词的常见项目
功能性能 功能描述:1.新词自动识别
对词典中不存在的词,可以自动识别,对词典的依赖较小;
2.词性输出
分词结果中带有丰富的词性;
3.动态词性输出
分词结果中的词性并非固定,会根据不同的语境,赋予不同的词性;
4.特殊词识别
比如化学、药品等行业词汇,地名、品牌、媒体名等;
5.智能歧义解决
根据内部规则,智能解决常见分词歧义问题;
6.多种编码识别
自动识别各种单一编码,并支持混合编码;
7.数词量词优化
自动识别数量词; 性能介绍:处理器:AMD Athlon II x2 250 3GHZ
单线程大于833KB/s,多线程安全。 一个PHP函数实现中文分词。使分词更容易,使用如下图:
Paoding(庖丁解牛分词)基于Java的开源中文分词组件,提供lucene和solr 接口,具有极 高效率和 高扩展性。引入隐喻,采用完全的面向对象设计,构思先进。
高效率:在PIII 1G内存个人机器上,1秒可准确分词 100万汉字。
采用基于 不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。
能够对未知的词汇进行合理解析。
仅支持Java语言。 MMSEG4J基于Java的开源中文分词组件,提供lucene和solr 接口:
1.mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。
2.MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。 盘古分词是一个基于.net 平台的开源中文分词组件,提供lucene(.net 版本) 和HubbleDotNet的接口
高效:Core Duo 1.8 GHz 下单线程 分词速度为 390K 字符每秒
准确:盘古分词采用字典和统计结合的分词算法,分词准确率较高。
功能:盘古分词提供中文人名识别,简繁混合分词,多元分词,英文词根化,强制一元分词,词频优先分词,停用词过滤,英文专名提取等一系列功能。 jcseg是使用Java开发的一个中文分词器,使用流行的mmseg算法实现。
1。mmseg四种过滤算法,分词准确率达到了98.4%以上。
2。支持自定义词库。在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类,词库整合了《现代汉语词典》和cc-cedict辞典。
3。词条拼音和同义词支持,jcseg为所有词条标注了拼音,并且词条可以添加同义词集合,jcseg会自动将拼音和同义词加入到分词结果中。
4。中文数字和分数识别,例如:"四五十个人都来了,三十分之一。"中的"四五十"和"三十分之一",并且jcseg会自动将其转换为对应的阿拉伯数字。
5。支持中英混合词的识别。例如:B超,x射线。
6。支持基本单字单位的识别,例如2012年。
7。良好的英文支持,自动识别电子邮件,网址,分数,小数,百分数……。
8。智能圆角半角转换处理。
9。特殊字母识别:例如:Ⅰ,Ⅱ
10。特殊数字识别:例如:①,⑩
11。配对标点内容提取:例如:最好的Java书《java编程思想》,‘畅想杯黑客技术大赛’,被《,‘,“,‘标点标记的内容。
12。智能中文人名识别。中文人名识别正确率达94%以上。
jcseg佩带了jcseg.properties配置文档,使用文本编辑器就可以自主的编辑其选项,配置适合不同应用场合的分词应用。例如:最大匹配分词数,是否开启中文人名识别,是否载入词条拼音,是否载入词条同义词……。 friso是使用c语言开发的一个中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入到其他程序中,例如:MySQL,PHP等。并且提供了一个php中文分词扩展robbe。
1。只支持UTF-8编码。【源码无需修改就能在各种平台下编译使用,加载完20万的词条,内存占用稳定为14M。】。
2。mmseg四种过滤算法,分词准确率达到了98.41%。
3。支持自定义词库。在dict文件夹下,可以随便添加/删除/更改词库和词库词条,并且对词库进行了分类。
4。词库使用了friso的Java版本jcseg的简化词库。
5。支持中英混合词的识别。例如:c语言,IC卡。
7。很好的英文支持,电子邮件,网址,小数,分数,百分数。
8。支持阿拉伯数字基本单字单位的识别,例如2012年,5吨,120斤。
9。自动英文圆角/半角,大写/小写转换。
并且具有很高的分词速度:简单模式:3.7M/秒,复杂模式:1.8M/秒。
⑽ coreseek3.2 php 怎样更新索引
php是无法更新coreseek 的索引的,需要使用coreseek的语法,配合定时任务来自动更新索引。
这个写起来很麻烦,我们的系统正好用了 coreseek ,说一下我的思路吧。
1、首先建立一个 search 表,这个表用来存你要进行搜索的、经过分词的数据,分词系统你们自己选,我使用的是php的pscws4中文分词。
DROPTABLEIFEXISTS`search`;
CREATETABLE`search`(
`searchid`int(11)NOTNULLAUTO_INCREMENT,
`title`varchar(255)NOTNULL,
`content`textNOTNULL,
`add_time`int(11)NOTNULL,
PRIMARYKEY(`searchid`)
)ENGINE=MyISAMAUTO_INCREMENT=15209DEFAULTCHARSET=utf8;
2、还需要一个 索引计数表search_counter,这个表用来存放每次索引更新后的最大一个ID,下次更新索引的时候,就不需要从头更新了,只需要比这个ID大的就可以。
DROPTABLEIFEXISTS`search_counter`;
CREATETABLE`search_counter`(
`counter_id`int(11)NOTNULL,
`max_doc_id`int(11)NOTNULL,
PRIMARYKEY(`counter_id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
3、配置coreseek ,以下是我在windows下coreseek的配置文件,linux 在服务器上,没去找。这里配置了2个索引源,一个是main,一个是增量索引delta,这样不需要每次重建所有索引,只需要合并main和delta就可以了。
#源定义
sourcemain
{
type=mysql
sql_host=192.168.0.10
sql_user=root
sql_pass=root
sql_db=database
sql_port=3306
sql_query_pre=SETNAMESutf8
sql_query_pre=REPLACEINTOsearch_counterSELECT1,MAX(searchid)FROMqhb_search
sql_query=SELECTsearchid,title,content,controller_id,controller,add_timeFROMsearch
#sql_query第一列id需为整数
#title、content作为字符串/文本字段,被全文索引
#sql_attr_uint=searchid#从SQL读取到的值必须为整数
sql_attr_uint=controller_id#数据库ID过滤
sql_attr_uint=controller#控制器过滤
sql_attr_timestamp=add_time#从SQL读取到的值必须为整数,作为时间属性
sql_query_info_pre=SETNAMESutf8#命令行查询时,设置正确的字符集
#sql_query_info=SELECT*FROMqhb_searchWHEREsearchid=$searchid#命令行查询时,从数据库读取原始数据信息
}
sourcedelta:main
{
sql_query_pre=SETNAMESutf8
sql_query=SELECTsearchid,title,content,controller_id,controller,add_timeFROMqhb_searchWHEREsearchid>(SELECTmax_doc_idFROMqhb_search_counterWHEREcounter_id=1)
sql_query_post=REPLACEINTOqhb_search_counterSELECT1,MAX(searchid)FROMqhb_search
}
#index定义
indexmain
{
source=main#对应的source名称
path=D:/WebSoft/coreseek/var/data/main#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
docinfo=extern
mlock=0
morphology=none
min_word_len=1
html_strip=0
#中文分词配置,详情请查看:http://www.coreseek.cn/procts-install/coreseek_mmseg/
#charset_dictpath=/usr/local/mmseg3/etc/#BSD、Linux环境下设置,/符号结尾
charset_dictpath=D:/WebSoft/coreseek/etc/#Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
charset_type=zh_cn.utf-8
}
indexdelta:main
{
source=delta
path=D:/WebSoft/coreseek/var/data/delta
}
#全局index定义
indexer
{
mem_limit=128M
}
#searchd服务定义
searchd
{
listen=9312
read_timeout=5
max_children=30
max_matches=1000
seamless_rotate=0
preopen_indexes=0
unlink_old=1
pid_file=D:/WebSoft/coreseek/var/log/searchd_main.pid#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
log=D:/WebSoft/coreseek/var/log/searchd_main.log#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
query_log=D:/WebSoft/coreseek/var/log/query_main.log#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}
4、建立索引。必须要先建立索引,coreseek 才能启动。下面是我在Windows的建立索引命令,如何使用命令行我就不赘述了。
D:WebSoftcoreseekinindexer--all--configd:WebSoftcoreseekinsphinx.conf
5、配置并启动服务
D:WebSoftcoreseekinsearchd--install--config
D:WebSoftcoreseekinsphinx.conf--servicenamecoreseek
6、Windows创建定时任务,每分钟更新一次索引
D:WebSoftcoreseekinindexer.exe--configD:WebSoftcoreseekinsphinx.confdelta--rotate
echoindexing,windowwillclosewhencomplete
7、Windows创建定时任务,每天凌晨2点合并索引
D:WebSoftcoreseekinindexer.exe--configD:WebSoftcoreseekinsphinx.conf--mergemaindelta--rotate
echoindexing,windowwillclosewhencomplete
8、附上 创建索引,重建索引,合并索引在windows及linux上的方法,以及一些使用上的小问题
windows:
建立索引
D:WebSoftcoreseekinindexer--all--configd:WebSoftcoreseekinsphinx.conf
重建索引
D:WebSoftcoreseekinindexer--configD:WebSoftcoreseekinsphinx.confmain--rotate
增量索引
D:WebSoftcoreseekinindexer--configD:WebSoftcoreseekinsphinx.confdelta--rotate
合并索引
D:WebSoftcoreseekinindexer--configD:WebSoftcoreseekinsphinx.conf--mergemaindelta--rotate
配置并启动服务
D:WebSoftcoreseekinsearchd--install--configD:WebSoftcoreseekinsphinx.conf--servicenamecoreseek创建自定义词库方法:
1、先去http://pinyin.sogou.com/dict/搜狗细胞词库下载需要的词库
2、使用深蓝词库转换将词库转换为txt
3、使用PHP程序将生成的txt转换为coreseek所需要的格式
4、附加到unigram.txt
5、使用命令更新分词词库
cmd进入bin目录,执行下面命令
mmseg-uD:WebSoftcoreseeketcunigram.txt
6、将生成的unigram.txt.uni改名为:uni.lib
7、重建索引
8、重启coreseek服务注意:
必须先建立索引,服务才能启动
1、coreseek索引或者查询时提示ERROR:invalidtokeninetc解决办法
该提示表示当前的配置文件的编码不是UTF-8(无BOM头)格式,无法正确解析,请使用编辑软件打开配置文件,另存为UTF-8(无BOM头)格式;
2、failedtolock.....try--rotate
索引已经建立,使用重建索引命令
3、报警告:failedtoscanfpidfrom
没有启动coreseek服务
4、过滤搜索结果,必须使用数组传递,只支持
无符号整数(1-32位宽);
UNIX时间戳(timestamps);
浮点值(32位,IEEE754单精度);
字符串序列(尤其是计算出的整数值);
多值属性MVA(multi-valueattributes)(32位无符号整型值的变长序列)
$this->shpinx->SetFilter('controller',array(1,2));
CENTOS操作方法
开机启动coreseek搜索服务:
vi/etc/rc.d/rc.local
在最后一行添加
/usr/local/coreseek/bin/searchd-c/usr/local/coreseek/bin/sphinx.conf
##如要停止搜索服务,请使用/usr/local/coreseek/bin/searchd-c/usr/local/coreseek/bin/sphinx.conf--stop
##如要已启动服务,要更新索引,请使用/usr/local/coreseek/bin/indexer-c/usr/local/coreseek/bin/sphinx.conf--all--rotate
linux下编辑定时任务crontab-e
#凌晨4点合并索引,其余时间每分钟更新索引
*0-3***/usr/local/sphinx/bin/indexer--config/usr/local/sphinx/etc/sphinx.confdelta--rotate
*6-23***/usr/local/sphinx/bin/indexer--config/usr/local/sphinx/etc/sphinx.confdelta--rotate
04***/usr/local/sphinx/bin/indexer--config/usr/local/sphinx/etc/sphinx.conf--mergemaindelta--rotate
启动服务:
/usr/local/coreseek/bin/searchd-c/usr/local/coreseek/bin/sphinx.conf
建立索引
/usr/local/coreseek/bin/indexer--all--config/usr/local/coreseek/bin/sphinx.conf
重建索引
/usr/local/coreseek/bin/indexer--config/usr/local/coreseek/bin/sphinx.confmain--rotate
增量索引
/usr/local/coreseek/bin/indexer--config/usr/local/coreseek/bin/sphinx.confdelta--rotate
合并索引
/usr/local/coreseek/bin/indexer--config/usr/local/coreseek/bin/sphinx.conf--mergemaindelta--rotate