服务器技术

 首页 > 服务器技术 > Linux > 提高sphinx(coreseek)的搜索精度

提高sphinx(coreseek)的搜索精度

分享到:
【字体:
导读:
          由于coreseek带的mmseg默认词库只有1w多个字词,搜索出来的结果准确度不是很理想。花了半天找了下搜索引擎相关的资料,现在记录下一些提高搜索精度的方法和步骤: 1. 基础词库要足够...

由于coreseek带的mmseg默认词库只有1w多个字词,搜索出来的结果准确度不是很理想。花了半天找了下搜索引擎相关的资料,现在记录下一些提高搜索精度的方法和步骤:


1. 基础词库要足够丰富,因为只有基础词库丰富了,才能谈权重设置。

2. 增加相关业务领域的词汇,进一步提升词库量,如果不是做综合搜索,一般都只需要提高自身业务领域的词汇。

3. 记录与收集用户搜索,把搜索记录高的作为新增词汇加入到词库中(前提是词库中不存在这个词)。


所以第一件事就是丰富基础词库,词库可以去搜狗拼音,QQ拼音官网下载。下下来后,统一把词汇进行处理,添加到一个词汇数据表 unigram,这个表只需包含id, word两列,id为自增字段,word为key字段,以保证这个词是独一无二的。


然后写个php脚本,把这个 unigram 表的数据转成 unigram.txt(mmseg要求的字典格式),下面是这个脚本的简单步骤


connect($dbhost, $dbuser, $dbpw, $dbname);
$max_id = $db->result_first('SELECT MAX(id) FROM unigram2');
 
$limit = 2000;
$start_page = isset($_GET['id']) ? (int)$_GET['id'] : 0;
$start_id = $limit * $start_page;
if ($start_id > $max_id) exit('ok');
$sql = "SELECT word FROM unigram2 limit {$start_id}, {$limit}";
$query = $db->query($sql);
while ($arr = $db->fetch_array($query)) {
$str .= $arr['word'] . "t1rnx:1rn";
}
 
$file = './unigram3.txt';
$h = fopen($file, 'a');
fwrite($h, $str);
 
$start_page++;
$url_forward = 'import.php?id='.$start_page;
echo '';
?>

 

得到新增的txt后,把这个txt里的所有内容复制到默认词典的底部。合并原有的的词库。

然后是用mmseg合并词典

 

cd /usr/local/mmseg3/

bin/mmseg -u etc/unigram.txt

 

执行上面的命令后,会生成 unigram.uni 文件,把它重命名为uni.lib(原来也有一个,可以对旧的改名)。

此时词库生成,但还需要重新生成一次索引,

 

cd /usr/local/coreseek

bin/indexer -c etc/xxx.conf --all

 

重启searchd

 

bin/searchd -c etc/xxx.conf --stop

bin/searchd -c etc/xxx.conf

 

至此,扩充词库并应用到索引的过程就完成了!

转:http://phpseyo.iteye.com/blog/1729376

      上一篇:php操作sphinx全面解析 下一篇:centos操作系统如何修改yum命令源
    分享到:
    php操作sphinx全面解析
    上一篇:httpsqs基本用法[转] 下一篇:提高sphinx(coreseek)的搜索精度
    centos操作系统如何修改yum命令源
    众所周知,用linux操作系统最便捷的安装软件方法是yum命令,但是yum命令是有限的,那么我们如何修改他的源来增加软件呢? 下面为大家介绍。 网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。具体...
    •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
    • 在这里……