Coreseek Windows下安装调试

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:   由于项目需要全文检索,后面就去网上查了下资料,找到了Sphinx【中文是狮身人面像】这个全文检索引擎,听说挺好用的,不过没有中文分词。后面又去找了一下,找到了Coreseek,一款中文全文检索/搜索软件。

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

 

一、Sphinx PHP扩展下载


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


  image.png


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


  image.png


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



  image.png

 

二、安装Coreseek


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

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

  image.png

  image.png

 


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

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


  image.pngimage.png

 

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

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


  image.png

 

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命令就行。

  image.png


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


  image.png


 

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

  image.png


  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>';


查看到结果:


image.png


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


image.png

 

四、计算经纬度


   现在时髦的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,两个结果差不多。


image.pngimage.png

 

 

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
存储 Cloud Native Java
Windows下Minio的安装以及基本使用
MinIO 是一个开源的云原生分布式对象存储系统,兼容亚马逊S3接口,适合存储大容量非结构化数据。本文介绍Windows下MinIO的安装与基本使用:通过以上步骤,您可以在Windows环境中成功安装并使用MinIO。
59 17
|
20天前
|
关系型数据库 MySQL 数据库
【MySQL基础篇】MySQL概述、Windows下载MySQL8.0超详细图文安装教程
在这一章节,主要介绍两个部分,数据库相关概念及MySQL数据库的介绍、下载、安装、启动及连接。接着,详细描述了MySQL 8.0的版本选择与下载,推荐使用社区版(免费)。安装过程包括自定义安装路径、配置环境变量、启动和停止服务、以及客户端连接测试。此外,还提供了在同一台电脑上安装多个MySQL版本的方法及卸载步骤。最后,解释了关系型数据库(RDBMS)的特点,即基于二维表存储数据,使用SQL语言进行操作,格式统一且便于维护。通过具体的结构图展示了MySQL的数据模型,说明了数据库服务器、数据库、表和记录之间的层次关系。
【MySQL基础篇】MySQL概述、Windows下载MySQL8.0超详细图文安装教程
|
17天前
|
安全 关系型数据库 MySQL
Windows Server 安装 MySQL 8.0 详细指南
安装 MySQL 需要谨慎,特别注意安全配置和权限管理。根据实际业务需求调整配置,确保数据库的性能和安全。
91 9
|
1月前
|
机器学习/深度学习 并行计算 异构计算
WINDOWS安装eiseg遇到的问题和解决方法
通过本文的详细步骤和问题解决方法,希望能帮助你顺利在 Windows 系统上安装和运行 EISeg。
98 2
|
2月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。
127 4
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
90 4
|
3月前
|
数据安全/隐私保护 Windows
安装 Windows Server 2019
安装 Windows Server 2019
|
3月前
|
Windows
安装 Windows Server 2003
安装 Windows Server 2003
|
3月前
|
Linux 网络安全 虚拟化
适用于Linux的Windows子系统(WSL1)的安装与使用记录
并放到启动文件夹,就可以开机自动启动了。
180 0
|
3月前
|
Windows
安装Windows XP系统
安装Windows XP系统