Ubuntu下,Python+Sphinx+MYSQL搭建搜索引擎

本文介绍了在Ubuntu系统下如何使用Python、Sphinx和MySQL搭建全文搜索引擎。内容包括Sphinx的简介,安装步骤,运行官方测试样例,以及如何在自己的数据库上配置和运行Sphinx进行全文检索。
摘要由CSDN通过智能技术生成

什么是Sphinx

sphinx是一款基于SQL的全文检索引擎,提供java、python、PHP、ruby等语言的API。可以基于数据库(如mysql)提供比数据库本身更优的全文检索服务。

安装Sphinx(Ubuntu)

1.首先需要安装MYSQL,MYSQL的安装这里不再赘述,网上教程很多.

2.直接到Sphinx官网下载对应的压缩包,下载之后,解压到/usr/local/文件夹下即可,这是免安装的压缩包.当然也可以去Github下载源码,使用源码进行安装.
使用源码安装的命令如下

#1.解压压缩包
$ tar xzvf sphinx-???.tar.gz
$ cd sphinx
#2.安装前的配置
./configure
    --prefix, 用于指定安装位置,例如 --prefix=/usr/local/sphinx
    --with-mysql, 当自动检测失败时,用于指定去哪里找MYSQL的依赖和库文件;
    --with-static-mysql, 通过静态连接的MYSQL支持来构建Sphinx;
    --with-pgsql, 用于说明哪里去找到PostgreSQL的依赖和库文件.
    --with-static-pgsql, 通过静态连接的PostgreSQL支持来构建Sphinx;
#3.构建二进制文件
$ make
#4.安装
$ make install

下文中,我们将以来自官网的免安装版本进行部署和测试.

3.解压或者安装之后,在sphinx文件夹下会有一些子文件夹

api/ 存放着不同语言调用Sphinx的API,包括java,ruby,PHP,python
doc/ 存放着Sphinx的文档
etc/  sphinx配置文件,不同的索引可以写不同的配置文件
bin/  sphinx程序,其中有建立索引的程序:indexer, 搜索守护进程:searchd
var/  一般用了放置indexer索引好的文件

让Sphinx可以工作的一个基本流程如下:

    1.获取可执行文件(安装之后在bin/文件夹下).
    2.创建sphinx.conf运行配置文件
    3.执行一次indexer --all,来初始化索引.
    4.运行searchd守护进程,用于监听检索.
    5.执行查询.
    6.定期执行indexer --all --rotate 来更新索引.
(看起来)So easy是不是,Let's go!.

运行官方测试样例

其中etc/文件夹下应该有三个文件:example.sql sphinx.conf.dist sphinx-min.conf.dist.它们是是Sphinx官方给出的样例配置文件.其中example.sql文件,用于在本地MYSQL中创建一个用于测试的数据库;sphinx.conf.dist是Sphinx启动的配置文件,而sphinx-min.conf.dist则是精简版的启动配置文件.
运行官方测试样例的步骤如下:

  1. 启动本地MySql服务,创建一个名为test的数据库(example.sql中指定的),然后执行example.sql脚本创建documents和tags两张表

  2. 因为我们对检索引擎没有什么特殊的需求,所以直接使用最简单的配置文件就行。直接使用sphinx-min.conf.dist做我们的配置文件,创建该文件的副本并更名为sphinx-min.conf,修改其中的mysql的host和user和password,如果是本地一数据库,官方建议host使127.0.0.1而非localhost。
    这里附上一篇博客,专门讲Sphinx配置文件的.

  3. 在sphinx安装路径下的bin文件夹下打开终端,以速度权限执行以下命令(如果是在windows系统下,要先以管理员权限打开CMD,然后再定位到bin文件夹下):

#这一条命令是用来根据conf文件创建文档的倒排索引的
./indexer -c ../etc/sphinx-min.conf --all
#索引创建成功之后,就可以启动检索引擎,监听端口9306和9312
./searchd -c ../etc/sphinx-min.conf

执行完这两条命令之后,searched进程就会以守护进程的形式开始工作,监听目标端口。其中9306端口是可以被mysql命令连接执行sphinxql(Sphinx的SQL)的,一般用于调试;而9312端口一般用来API调用。

  1. 下面我们尝试一下MySql连接9306端口,执行下面这条命令
mysql -h127.0.0.1 -P9306 -uroot -p

按照提示输入密码之后,就进入了经过Sphinx包装之后的“伪MySql”。我们执行下面这条SQL

show tables

会看到test1和testrt两张“表”。这是由indexer创建的普通索引和增量索引。
我们再执行下面这条SQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值