sphinx /coreseek 一站式搭建和 PHP 检索教程

本文详细介绍Sphinx/coreseek全文搜索引擎的安装配置与实践应用,包括Linux环境下编译安装、索引配置、PHP集成及常见错误解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sphinx / coreseek 从懵逼到入门一站式不完全指南

本文内容:

主要解决以下问题:

Sphinx / coreseek 是什么,它解决什么问题,什么情况下我应该使用它,如何使用 ?

前置知识:

1、有 Linux 的命令行的基本编译使用经验

2、熟悉 php 的基本语法

3、熟悉 php 开发环境的搭建

Sphinx / coreseek 简介

Sphinx / coreseek 是一款全文搜索引擎。主要解决海量数据的检索问题。

coreseek 是国人在 Sphinx 基本上开发的支持中文分词等强大功能的解决方案 - 可以看做是 Sphinx for chinese ^^

核心组件和工作原理概述

在这里插入图片描述

在 coreseek 安装完毕之后 ( 后文会有详细的编译安装过程,这里只做了解即可 ),会有以下的执行文件位于: 安装目录/coreseek/bin 下面:

indexer indextool search searchd spelldump

一、其中 indexer 为建立索引的工具,可以用于建立倒排索引,即图中的步骤 1

二、searchd 为搜索守护进程, 用于和编程语言通讯完成查询操作, 即步骤 2、3

三、step 二之后, 返回的是 MySQL (或者其他数据库,本文的数据源是来自 MySQL )数据表的主键,然后根据主键去数据库查询需要的字段即可。

作业环境:

操作系统: centos 6

软件:PHP 5.6.36 、MySQL 5.5.60、coreseek4.1 beta

安装配置

先下载 coreseek4.1:https://download.youkuaiyun.com/download/u010620626/10696385

注意:

后面的操作,如无特殊说明,均是使用 root 身份执行,若在执行命令的过程中遇到报错,参见文末常见错误的解决方法。

# 1、解压并切换到解压后的目录
tar -zxf coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta
ll
# 解压后可以看到有以下文件 csft-4.1  mmseg-3.2.14  README.txt  testpack

# 2、编译分词软件包 mmseg ( 更多关于 mmseg 信息,见文章底部附录)
cd mmseg-3.2.14
./bootstrap
./configure --prefix=/usr/local/mmseg3
make
make install

# 3、安装 coreseek 
1) cd ../csft-4.1/
2) sh buildconf.sh
3) ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql

# 为了避免后面产生一个 libiconv 类型的错误,这里直接修改,节约一个编译的时间
4) vim src/Makefile
将 249 行从 "LIBS = -ldl -lm -lz -lexpat  -L/usr/local/lib -lrt  -lpthread" 修改为 "LIBS = -ldl -lm -lz -lexpat -liconv  -L/usr/local/lib -lrt  -lpthread"

5) make && make install

# 4、这里为止,大部分的安装工作 (后文还有一个 php 连接 sphinx 的客户端编译和 sphinx 索引配置相关的工作) ,我们来针对分词功能进行一些测试
cd ../testpack/
cat var/test/test.xml # test.xml 中有一些用来测试分词的中文
/usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml # 使用 mmseg 对 test.xml 的语料进行分词
/usr/local/coreseek/bin/search -c etc/csft.conf 网络搜索

出现如下的结果,说明一切正常

在这里插入图片描述

PHP 和 Sphinx 进行通讯有两种可选方式:

1、在 PHP 所在的环境安装 libsphinxclient 依赖 (推荐)

2、inlude 解压目录 coreseek-4.1-beta/testpack/api/sphinxapi.php 文件后使用。

为了配合框架的命名空间和保持代码的风格一致性,( 而且我偷偷臆测可能使用编译类库的性能要好些,没有测试 ), 于是我使用的第一个方式。

# 1、安装 sphinxclient 扩展,切换到 libsphinxclient 目录,根据自己实际环境酌情修改,后文如无特殊说明,所有路径都是根据自己的环境酌情修改
cd coreseek-4.1-beta/testpack/api/libsphinxclient 
./configure  --prefix=/usr/local/sphinxclient
make && make install

# 2、安装 sphinx PHP 扩展
wget -c http://pecl.php.net/get/sphinx-1.3.3.tgz # 最新的 sphinx 扩展可以在 pecl 官网下载 http://pecl.php.net, 截止发文 1.3.3 的扩展适用于 PHP 5.2.2 - 6.0.0 版本
tar -zxf sphinx-1.3.3.tgz
cd sphinx-1.3.3.tgz
phpize # 如果 phpize 不在环境变量中则需指定完整路径
./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinxclient # 注意这里 with-php-config 参数填写自己的实际 php-config 文件路径, with-sphinx 后填写步骤 1 中 sphinxclient 指定的安装路径
make && make install

# 3、在 php.ini 中添加 sphinx 扩展 
extension=sphinx.so

# 4、确认扩展安装成功
php -m | grep sphinx # 看到红色的 sphinx 字样说明安装成功

索引配置

接下来,讲解索引配置文件的构成和作用。

行文思路:

1、先看到的结构块,做到对构成成分有大体的把握

2、再针对各个结构快详细进行讲解

vim /usr/local/coreseek/etc/sphinx.conf.dist # 下面我们使用这个文件来讲解 sphinx 配置文件

# 数据源
# 主要作用: 指定要索引数据源及该数据源的其他一些参数,比如数据类型 (Mysql 、xml 等),连接的账户密码等
source src1 # source 关键字配置数据数据源, src1 可以是任意合法的变量名
{
    
}

# 索引  
# 主要作用: 创造索引需要的一些条件,如:指定索引的数据源,分词词库目录和数据编码等
index test1 # index 关键字配置索引, test1 名称可以按需要指定
{
    
}

# 构建索引的服务
indexer # 索引服务的一些配置,后文我们将在这里限制索引时能使用的最大内存
{
    
}

# 搜索服务的守护进程
#主要作用:对守护进程进行一些配置,比如守护进程的监听端口日志文件的路径等
searchd # 对应 searchd 守护进程的一些配置
{
    
}

下面再具体讲解

这是我们用于测试的最小配置

# 数据源
source main
{
# 数据(库)类型
type=mysql 
# host
sql_host=127.0.0.1
# 用户
sql_user=root
# 密码
sql_pass=root
# 数据库
sql_db=test
# 端口
sql_port=3306
# 在 sql_query 之前执行
sql_query_pre=set names utf8
sql_query=select id, title from news
# 适用于命令行
sql_query_info=select id, title from news
}

# 索引
index ind_main
{
source=main
path=/usr/local/coreseek/var/data/ind_main/
charset_type=zh_cn.utf-8
charset_dictpath=/usr/local/mmseg/etc
}

# 索引服务
indexer
{
	# 设置最大索引时内存限制大小
	mem_limit=128M
}

# 搜索守护进程
searchd
{
	listen=9312
	listen=9306:mysql41
	read_timeout=5
	max_children=30
	max_matches=1000
	seamless_rotate=0
	preopen_indexes=0
	unlink_old=1
	pid_file=/usr/local/coreseek/var/log/searchd_mysql.pid
	log=/usr/local/coreseek/var/log/searchd_mysql.log
	query_log=/usr/local/coreseek/var/log/query_mysql.log
}

# 如果需要了解更多的配置项: https://hackoops.com/476.html

PHP + coreseek 的示范

1、建立测试 MySQL 数据

下面是测试要用到的数据表和数据,需要录入 MySQL 中,我们建立并使用 test 的数据库。

create table news (
	id int(11) primary key auto_increment,
	title varchar(100) not null,
	content text)
;

insert into news (title,content)  values ('PHP 是最好的语言', '编程语言学习心得'), ('PHP 从入门到架构', 'ppt架构师了解一下');

2、coreseek 配置文件准备

将最小测试配置文件复制到 /usr/local/coreseek/etc/ 目录下命名为 csft.conf 文件 (文件名可以根据需要另行指定,/usr/local/coreseek/etc/csft.conf 是 coreseek 需要配置文件的默认路径和文件名,因此后面在启动 searchd 服务或者索引服务的时候可以省略配置文件路径)

3、建立索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf

测试索引

/usr/local/coreseek/bin/search php

看到如下输出,则索引建立好了。

在这里插入图片描述

4、启动 searchd 索引服务

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf # 如果是标准路径则配置文件路径可以省略

启动之后,我们就可以使用 php 来执行查询了

<?php
$s = new SphinxClient;
var_dump($s);
$s->setServer('127.0.0.1', 9312);
$s->setMatchMode( SPH_MATCH_EXTENDED2 );
$s->SetLimits( 0, 20, 1000 );
$result = $s->query( " PHP", 'ind_main' );
// $result2 = $s->query( " @(title, content) PHP", 'ind_main' ); // 指定搜索字段范围: 在 title, content 字段同时搜索 更多参见: http://web.archive.org/web/20150403083256/http://www.coreseek.cn:80/docs/coreseek_4.1-sphinx_2.0.1-beta.html
// $result3 = $s->query("架构师", 'ind_main');
var_dump($result);
// var_dump($result2);
// var_dump($result3);

补充:

上面注释掉的部分并没有得到期待的查询结果,这是 coreseek 的默认词库限制导致的,通常如果对搜索结果的精度有一定得要求,则会选择扩展词库,可以参见我的另一篇文章

更新索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --rotate --all # 当有多个索引的时候可以通过 --all 更新所有,也可以像这样(ind_main)指定更新单独的索引

结束语

最后我们来回顾一下,coreseek 是一款全文检索殷勤,作用是提供海量数据的高速检索和服务搭建配置等基础操作。

常见错误:

1、

error: cannot find input file: src/Makefile.in

或者遇到其他类似error错误时…

解决方案:

依次执行下面的命令,我运行’aclocal’时又出现了错误,解决方案请看下文描述

yum -y install libtool

aclocal

libtoolize --force

automake --add-missing

autoconf

autoheader

make clean

2、

如果出现undefined reference to `libiconv’的类似错误,可以按照如下方法处理:
首先configure,然后vim src/makefile
在其中搜索lexpat,在其后加上 -liconv
修改后该行应该为:-lexpat -liconv -L/usr/local/lib
然后再次make && make install

3、

编译过程中报了一个config.status: error: cannot find input file: src/Makefile.in这个的错误,然后运行下列指令再次编译就能通过了:

aclocal

libtoolize --force

automake --add-missing

autoconf

autoheader

make clean

参考:
https://hackoops.com/480.html

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人运动设备中的六轴姿态传感器,它集成了三轴陀螺仪三轴加速度计。这款传感器能够实时监测并提供设备的角速度线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp``MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式I2C地址,`getAcceleration()``getGyroscope()`则分别用于获取加速度角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()``getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准滤波,以消除噪声漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客其他开源资源是学习解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡德咏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值