博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Coreseek Windows下安装调试
阅读量:5927 次
发布时间:2019-06-19

本文共 5153 字,大约阅读时间需要 17 分钟。

  由于项目需要全文检索,后面就去网上查了下资料,找到了Sphinx【中文是狮身人面像】这个全文检索引擎,听说挺好用的,不过没有中文分词。后面又去找了一下,找到了,一款中文全文检索/搜索软件。

 

一、Sphinx PHP扩展下载

  PHP已经有专门的Sphinx的扩展文件,可以下载到不同版本的扩展。

  

  扩展安装成功后,就能看到sphinx信息了。

  

  也可以通过引用一个php类文件达到同样的效果,文件是在api文件夹下面的sphinxapi.php。这个更好用点,在调试的时候发现,如果是直接引用的那个dll有时候会报方法不存在,但是明明在说明里面是有的。

  

 

二、安装Coreseek

1) 我这边下载了。按照网站上面写的过程,我在本地布了一下。

  这个local目录其实可以自己随便建立,这里建的我感觉好深,打dos命令的时候挺麻烦的。

  

  

 

2) 打开下载下来的压缩包,etc里面有很多conf的配置文件。

  在var\test文件里有个documents.sql的文件,这一个demo数据库,等下就会用这个做测试。

  

 

3) 把etc中的csft_mysql.conf文件复制到bin中,并改名为sphinx.conf。

  因为我的全文检索需要配合MySQL数据库,所以需要配置这个文件。

  

 

4) 修改配置文件,刚开始配置文件没设置好,老会报错。

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库#源定义source mysql{    type                    = mysql    sql_host                = localhost    sql_user                = root    sql_pass                = 123456    sql_db                  = sphinx    sql_port                = 3306    sql_query_pre            = SET NAMES utf8    sql_query                = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents                                                              #sql_query第一列id需为整数                                                              #title、content作为字符串/文本字段,被全文索引    sql_attr_uint            = group_id           #从SQL读取到的值必须为整数    sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性        sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集    sql_query_info            = SELECT * FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息}#index定义index mysql{    source            = mysql             #对应的source名称    path            = C:/usr/local/coreseek-4.1-win32/var/data/documents #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    docinfo            = extern    mlock            = 0    morphology        = none    min_word_len        = 1    html_strip                = 0    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾    charset_dictpath = C:/usr/local/coreseek-4.1-win32/etc/        #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...    charset_type        = zh_cn.utf-8}#全局index定义indexer{    mem_limit            = 128M}#searchd服务定义searchd{    compat_sphinxql_magics = 0    listen                  =   9312    read_timeout        = 5    max_children        = 30    max_matches            = 1000    seamless_rotate        = 0    preopen_indexes        = 0    unlink_old            = 1    pid_file = C:/usr/local/coreseek-4.1-win32/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    log = C:/usr/local/coreseek-4.1-win32/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    query_log = C:/usr/local/coreseek-4.1-win32/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...    binlog_path =                                #关闭binlog日志}

 

5) 建立索引,打一句dos命令就行。

  

  在#index定义中,设置了path的路径,在这个路径里面能够看到索引文件。

  

 

6) 打开控制台让Sphinx监听端口,接收搜索命令。

  

  searchd 可以安装成一个Windows服务,命令如下:

C:\usr\local\coreseek> C:\usr\local\coreseek\bin\searchd.exe --install --config C:\usr\local\coreseek\etc\coreseek.conf --servicename Coreseek

  这样 searchd 服务应该出现在“控制面板->系统管理->服务”的列表中了. 服务应该出现在“控制面板->系统管理->服务”的列表中了。

    删除服务的命令如下:

sc delete Coreseek

 

三、PHP代码测试

setServer("127.0.0.1", 9312); $s->setMatchMode(SPH_MATCH_PHRASE); $s->setMaxQueryTime(30); $res = $s->query('愚人', 'mysql'); #[愚人]关键字,[mysql]数据源source $err = $s->GetLastError(); echo '
';  var_dump($res);  var_dump($err);  echo '
';

查看到结果:

与数据库比对一下,可以看到搜索出了第一条的数据。

 

四、计算经纬度

   现在时髦的APP客户端,基本上都会涉及到一个功能,就是寻找附近的XX,在我们服务端就是需要计算经纬度距离了。原先我们的做法是在MySQL中自定义一个计算两个经纬度点距离的函数,在做查询的时候调用,现在用Coreseek可以直接调用一个方法SetGeoAnchor。

先看看Coreseek中对这个方法的说明:

原型: function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long )为地理距离计算设置锚点,并且允许使用它们。$attrlat 和 $attrlong是字符串,分别指定了对应经度和纬度的属性名称。 $lat 和 $long是浮点值,指定了锚点的经度和纬度值,以角度为单位。

再看看的说明:

Prototype: function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long )Sets anchor point for and geosphere distance (geodistance) calculations, and enable them.$attrlat and $attrlong must be strings that contain the names of latitude and longitude attributes, respectively. $lat and $long are floats that specify anchor point latitude and longitude, in radians.

原文说的$lat 和 $long这两个其实是弧度,而不是翻译的角度。

 

1)在做索引的时候 ,将经纬度数据源转换成弧度。 radians是MySQL中由度转化为弧度的函数。

sql_query  = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content,         radians(longtitude) as longtitude, radians(latitude) as latitude FROM documents order by id desc

2)PHP中引用方法,并可做过滤与排序,deg2rad函数将角度转换为弧度。

$lon = 121;$lat = 31;$s->SetGeoAnchor('latitude', 'longtitude', (float)deg2rad($lat), (float) deg2rad($lon));$s->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc'); // 按距离正向排序//$s->SetFilterFloatRange('@geodist', 0.0, $radius); // 过滤掉大于10公里的地点

3)查看页面结果,距离大约为49749;同时我用以前的那个MySQL自定义函数,在数据库中跑了一下,距离是49704,两个结果差不多。

 

 

 

demo下载:

 

2014-12-24 新增经纬度demo下载:

 

参考资料:

Sphinx 2.0.3 Windows下安装与使用说明, 附查询实例

sphinx中文分词搜索coreseek windows下安装与基本使用简介

Sphinx找不到索引文件的解决办法

sphinx全文检索之PHP使用教程

Sphinx SetGeoAnchor 经纬度查找附近地点

转载地址:http://yievx.baihongyu.com/

你可能感兴趣的文章
希望转载Oracle体系结构及备份(一)——了解体系结构
查看>>
简单实现TCP下的大文件高效传输
查看>>
oracle系统包——dbms_random用法
查看>>
生成不重复的随机数的方法
查看>>
使用ActivityManager实现进程管理
查看>>
安装包部署项目简述
查看>>
HipHop PHP简介(转)
查看>>
MySQL-LAST_INSERT_ID();使用注意事项
查看>>
【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体
查看>>
uboot之run_command简单分析
查看>>
[emacs] org-mode的一些小技巧
查看>>
Android UI(一)Layout 背景局部Shape圆角设计
查看>>
jqueryMobile 动态添加元素,展示刷新视图方法
查看>>
SQL注入小结
查看>>
微信公众平台增加批量获取用户基本信息接口
查看>>
jQuery遍历table中间tr td并获得td价值
查看>>
oracle-odu小试牛刀--恢复drop表的数据
查看>>
C/C++跨平台的的预编译宏
查看>>
海哥:T2C时代的到来了,那么什么叫T2C?
查看>>
解决 maven 项目启动 提示 class not find
查看>>