Coreseek Windows下安装调试

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

 

一、Sphinx PHP扩展下载

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

  

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

  

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

  

 

二、安装Coreseek

1) 我这边下载了4.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                    = mysqlsql_host                = localhostsql_user                = rootsql_pass                = 123456sql_db                  = sphinxsql_port                = 3306sql_query_pre            = SET NAMES utf8sql_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            = externmlock            = 0morphology        = nonemin_word_len        = 1html_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 = 0listen                  =   9312read_timeout        = 5max_children        = 30max_matches            = 1000seamless_rotate        = 0preopen_indexes        = 0unlink_old            = 1pid_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代码测试

复制代码
<?php
header('Content-Type: text/html; charset=utf-8');//防止中文显示为乱码
$s = new SphinxClient;//已经引入扩展,所以不需要额外require文件了
$s->setServer("127.0.0.1", 9312);  
$s->setMatchMode(SPH_MATCH_PHRASE);  
$s->setMaxQueryTime(30);  $res = $s->query('愚人', 'mysql'); #[愚人]关键字,[mysql]数据源source  
$err = $s->GetLastError();  echo '<pre>';  
var_dump($res);  
var_dump($err);  
echo '</pre>';  
复制代码

查看到结果:

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

 

四、计算经纬度

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

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

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

再看看sphinx中API的说明:

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,两个结果差不多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux sudo命令全称,linux sudo命令的概念与使用

1.sudo介绍本文引用地址&#xff1a;http://www.eepw.com.cn/article/201610/305498.htmsudo是linux下常用的允许普通用户使用超级用户权限的工具&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令&#xff0c;如halt&#xff0c;reboot&#xff0c;su等等。这样…

java 方法 示例_Java语言环境getISOCountries()方法与示例

java 方法 示例区域设置类getISOCountries()方法 (Locale Class getISOCountries() method) getISOCountries() method is available in java.util package. getISOCountries()方法在java.util包中可用。 getISOCountries() method is used to return an array of string that …

android shape.xml 属性详解

转载源:http://blog.csdn.net/harvic880925/article/details/41850723 一、简单使用 刚开始&#xff0c;就先不讲一堆标签的意义及用法&#xff0c;先简单看看shape标签怎么用。 1、新建shape文件 首先在res/drawable文件夹下&#xff0c;新建一个文件&#xff0c;命名为&#…

linux检查防火墙是否阻挡端口,浅析linux查看防火墙状态和对外开放的端口状态...

1.查看防火墙状态查看防火墙状态 systemctl status firewalld开启防火墙 systemctl start firewalld关闭防火墙 systemctl stop firewalld开启防火墙 service firewalld start若遇到无法开启先用&#xff1a;systemctl unmask firewalld.service然后&#xff1a;systemctl star…

Java类class getClasses()方法及示例

类的类getClasses()方法 (Class class getClasses() method) getClasses() method is available in java.lang package. getClasses()方法在java.lang包中可用。 getClasses() method is used to return an array that contains Class objects denoting all the public classes…

linux内核计数函数,linux中的内核引用计数器

linux中的内核引用计数器文档 /Documentation/kref.txt翻译。krefs能让你往你的对象中添加一个引用计数器。如果你有一些需要在多处被使用和传递的对象&#xff0c;而你并没有给这些对象中添加引用计数器的话&#xff0c;你的代码肯定会有某些缺陷&#xff0c;会出现一些问题。…

jQuery常用的全局方法源码

下面常用方法的详细使用请查看&#xff1a;http://www.cnblogs.com/moqiutao/p/4775725.html 1.$.noConflict()方法 语法&#xff1a;jQuery.noConflict(removeAll) removeAll&#xff1a;布尔值。指示是否允许彻底将 jQuery 变量还原。 源码&#xff1a; var// Map over jQuer…

isinstance_Java类class isInstance()方法及示例

isinstance类class isInstance()方法 (Class class isInstance() method) isInstance() method is available in java.lang package. isInstance()方法在java.lang包中可用。 isInstance() method is used to check whether the given object is an instance with the object d…

Linux比较大文件内容,Linux系统最大文件打开数优化,解决Too many open files报错

这是一个Linux系统常见的故障&#xff0c;网络上也能轻易的找到解决办法&#xff0c;我也只是在工作中遇到了这个问题&#xff0c;所以在博客记录下&#xff0c;以备不时之需。一、报错截图&#xff1a;图为resin的报错日志&#xff0c;很明显提示了Too many open files&#x…

java日历类add方法_Java日历computeFields()方法及示例

java日历类add方法日历类的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is available in java.util package. 在java.util包中提供了validateFields()方法 。 computeFields() method is used to convert current ms(milliseconds) t…

Varnish缓存代理简介与配置

一、varnish原理&#xff1a;1&#xff09;Varnish简介&#xff1a;varnish缓存是web应用加速器&#xff0c;同时也作为http反向缓存代理。你可以安装varnish在任何http的前端&#xff0c;同时配置它缓存内容。与传统的 squid 相比&#xff0c;varnish 具有性能更高、速度更快、…

Linux允许61440端口,释放对某端口的占用

释放对某端口的占用假如我们需要确定谁占用了我们的9050端口在windows命令行窗口下执行&#xff1a;1.查看所有的端口占用情况C:\>netstat -ano协议 本地地址 外部地址 状态 PIDTCP 127.0.0.1:1434 0.0.…

as_hash ruby_Hash.merge(other_hash)方法与Ruby中的示例

as_hash rubyHash.merge(other_hash)方法 (Hash.merge(other_hash) Method) In this article, we will study about Hash.merge(other_hash) Method. The working of the method can’t be assumed because it’s quite a different name. Let us read its definition and unde…

linux 安装nfs 客户端,在CentOS 7上安装NFS服务器和客户端

NFS服务器和客户端安装在CentOS 7上版本1.0作者&#xff1a;Srijan Kishore 在Twitter上关注howtoing最后编辑 16 / Dec / 2014本指南介绍如何在CentOS 7.0中配置NFS服务器网络文件系统(NFS)是一种流行的分布式文件系统协议&#xff0c;可让用户在其服务器上安装远程目录。 该系…

安装ORACLE 时报错 /jre/1.4.2/lib/i386/libawt.so:

最近在linux下安装oracle 10g时&#xff0c;碰到如下问题&#xff1a; /tmp/OraInstall2011-09-11_02-16-11PM/jre/1.4.2/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory occurred.. 网上找了下&#xff0c;真让人费解呀&am…

Java线程start()vs run()方法及示例

Java | 线程start()vs run()方法 (Java | Thread start() vs run() Methods) When we call the start() method, it leads to the creation of a new thread. Then, it automatically calls the run() method. If we directly call the run() method, then no new thread will …

linux安装卸载mysql,Linux6 系列 安装、卸载mysql

Linux6 系列 安装、卸载mysqlLinux6 系列 安装、卸载mysqlLinux环境下载mysql&#xff1a;https://blog.csdn.net/weixin_40816738/article/details/90111456一、安装环境依赖&#xff1a;yum install -y cmake make gcc gcc-c libaio ncurses ncurses-devel二、安装流程1、软件…

Python | 如何使用pip升级所有Python软件包?

While using Python as a programming language, its a very common scenario to use a virtual environment and PIP, a package manager for python. 当使用Python作为编程语言时&#xff0c;使用虚拟环境和PIP (Python的程序包管理器)是一种非常常见的情况。 Its a common …

linux下enum类型占几个字节,enum大小问题

问题描述板卡有两个CPU&#xff0c;ARMMIPS&#xff0c;同时运行三个系统REE(linux) TEE(SierraTEE) SEE(TDS)。TEE跟SEE通过RPC进行通信&#xff0c;有enum成员的结构体信息传递会出错&#xff0c;如下结构体&#xff1a;struct sTag {enum A;enum B;int C;enum D;};问题分析…

ASP.NET导出word实例

ASP.NET导出word实例 最近遇到一个题目就是如何在asp.net中将数据导出到word中&#xff0c;由于数据是动态的&#xff0c;所以需要在后台拼出想要的的格式&#xff0c;翻遍了网页找出了一个比较满意的代码&#xff0c;感谢那位高手。代码如下&#xff1a; public void Download…