百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

在Ubuntu安装和配置Sphinx

bigegpt 2024-08-22 10:38 2 浏览

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。

在开始本指南之前,您需要:

  • 一个Ubuntu 16.04服务器。
  • sudo的一个非root用户,您可以通过以下设置本教程 。
  • 安装在服务器上,你可以通过下面的第2步设置在MySQL 本教程 。

第1步 - 安装Sphinx

在Ubuntu上安装Sphinx很容易,因为它在本地软件包存储库中。 使用安装它apt-get 。不行可以运行apt-get update

sudo apt-get install sphinxsearch

现在您已经在服务器上成功安装了Sphinx。 在启动Sphinx守护进程之前,让我们进行配置。

第2步 - 创建测试数据库

接下来,我们将使用随包提供的SQL文件中的示例数据设置数据库。 这将允许我们测试Sphinx搜索以后工作。

让我们将示例SQL文件导入数据库。 首先,登录到MySQL服务器shell。

mysql -u root -p

提示时输入MySQL root用户的密码。 您提示将改变为mysql> 。

创建虚拟数据库。 在这里,我们称它为测试 ,但你可以将其命名为任何你想要的。

CREATE DATABASE test;

导入示例SQL文件。

SOURCE /etc/sphinxsearch/example.sql;

然后离开MySQL shell。

quit

现在你有一个数据库填充样本数据。 接下来,我们将定制Sphinx的配置。

第3步 - 配置Sphinx

Sphinx的配置应该是在一个名为sphinx.conf中/etc/sphinxsearch 。 配置包括那些运行必不可少的3个主要模块: 索引 ,searchd的 ,和来源 。 我们将提供一个示例配置文件供您使用,并解释每个部分,以便以后进行自定义。

首先,创建sphinx.conf文件。

sudo nano /etc/sphinxsearch/sphinx.conf

这些指数 ,searchd的 ,和块的描述如下。 然后,在这个步骤结束时,对全部sphinx.conf被包括为你复制并粘贴到文件中。

块包含源代码,用户名和密码到MySQL服务器的类型。 所述的第一列sql_query应该是唯一的ID。 SQL查询将在每个索引上运行,并将数据转储到Sphinx索引文件。 下面是每个字段和源块本身的描述。

  • type :数据源索引的类型。 在我们的例子,这是MySQL。 其他支持的类型包括pgsql,mssql,xmlpipe2,odbc等。
  • sql_host :主机名MySQL的主机。 在我们的例子,这是localhost 。 这可以是域或IP地址。
  • sql_user :用户名MySQL的登录。 在我们的例子,这是根源
  • sql_pass :密码为MySQL用户。 在我们的示例中,这是根MySQL用户的密码。
  • sql_db :存储数据的数据库的名称。 在我们的例子,这是考验
  • sql_query :查询从数据库到索引那转储数据。

这是源块:

sphinx.conf的源代码块

source src1
{
 type = mysql
 #SQL settings (for ‘mysql’ and ‘pgsql’ types)
 sql_host = localhost
 sql_user = root
 sql_pass = password
 sql_db = test
 sql_port = 3306 # optional, default is 3306
 sql_query = \
 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
 FROM documents
 sql_attr_uint = group_id
 sql_attr_timestamp = date_added
}

索引组件包含源和存储数据的路径。

  • source :源块的名称。 在我们的例子,这是src1的
  • path :路径保存索引。

sphinx.conf的索引块

index test1
{
 source = src1
 path = /var/lib/sphinxsearch/data/test1
 docinfo = extern
}

searchd的组件包含端口和其他变量来运行Sphinx守护进程。

  • listen :这Sphinx守护进程运行的端口,后面的协议。 在我们的例子,这是9306:mysql41。 已知的协议是:Sphinx (SphinxAPI)和:mysql41(SphinxQL)
  • query_log :路径保存查询日志。
  • pid_file :到Sphinx守护进程的PID文件的路径。
  • seamless_rotate :同时旋转海量数据预缓存的指标,防止searchd的摊位。
  • preopen_indexes :是否强行盘前在启动时的所有索引。
  • unlink_old :是否删除成功旋转旧的索引拷贝。

searchd块的sphinx.conf

searchd
{
 listen = 9312:sphinx #SphinxAPI port
 listen = 9306:mysql41 #SphinxQL port
 log = /var/log/sphinxsearch/searchd.log
 query_log = /var/log/sphinxsearch/query.log
 read_timeout = 5
 max_children = 30
 pid_file = /var/run/sphinxsearch/searchd.pid
 seamless_rotate = 1
 preopen_indexes = 1
 unlink_old = 1
 binlog_path = /var/lib/sphinxsearch/data
}

复制和粘贴的完整配置如下。 你需要下面来改变它唯一的变量是sql_pass源块,这是高亮显示的变量。

完整的sphinx.conf文件

source src1
{
 type = mysql
 sql_host = localhost
 sql_user = root
 sql_pass = your_root_mysql_password
 sql_db = test
 sql_port = 3306
 sql_query = \
 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
 FROM documents
 sql_attr_uint = group_id
 sql_attr_timestamp = date_added
}
index test1
{
 source = src1
 path = /var/lib/sphinxsearch/data/test1
 docinfo = extern
}
searchd
{
 listen = 9306:mysql41
 log = /var/log/sphinxsearch/searchd.log
 query_log = /var/log/sphinxsearch/query.log
 read_timeout = 5
 max_children = 30
 pid_file = /var/run/sphinxsearch/searchd.pid
 seamless_rotate = 1
 preopen_indexes = 1
 unlink_old = 1
 binlog_path = /var/lib/sphinxsearch/data
}

探索更多的配置,你可以看看在/etc/sphinxsearch/sphinx.conf.sample文件,里面有所有的变量在更详细的解释。

第4步 - 管理索引

在这一步中,我们将数据添加到Sphinx索引,并确保利用指数保持最新cron 。

首先,使用我们之前创建的配置将数据添加到索引。

sudo indexer --all

你应该得到类似下面的东西。

OutputSphinx 2.2.9-id64-release (rel22-r5006)
Copyright (c) 2001-2015, Andrew Aksyonoff
Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.010 sec, 18552 bytes/sec, 384.50 docs/sec
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

在生产环境中,有必要保持索引为最新。 为了做到这一点,让我们创建一个cronjob。 首先,打开crontab。

crontab -e

可能会询问您要使用哪个文本编辑器。 选择你喜欢的; 在本教程中,我们使用nano 。

随后的cronjob将每小时运行一次,并使用我们之前创建的配置文件向索引添加新数据。 将其复制并粘贴到文件末尾,然后保存并关闭文件。

crontab

@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all

现在Sphinx已经完全设置和配置,我们可以启动服务并尝试。

第5步 - 启动Sphinx

默认情况下,Sphinx守护程序关闭。 首先,我们将改变这一行启用START=no到START=yes中/etc/default/sphinxsearch 。

sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch

然后,使用systemctl重启Sphinx守护进程。

sudo systemctl restart sphinxsearch.service

要检查Sphinx守护程序是否正确运行,请运行。

sudo systemctl status sphinxsearch.service

你应该得到类似下面的东西。

Output● sphinxsearch.service - LSB: Fast standalone full-text SQL search engine
 Loaded: loaded (/etc/init.d/sphinxsearch; bad; vendor preset: enabled)
 Active: active (running) since Tue 2016-07-26 01:50:00 EDT; 15s ago
 . . .

这也将确保Sphinx守护程序即使在服务器重新启动时也启动。

第6步 - 测试

现在,一切都设置好了,让我们测试搜索功能。 使用MySQL接口连接到SphinxQL(在端口9306上)。 您提示将改变为mysql> 。

mysql -h0 -P9306

让我们搜索一个句子。

SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;

你应该得到类似下面的东西。

Output+------+----------+------------+
| id | group_id | date_added |
+------+----------+------------+
| 1 | 1 | 1465979047 |
| 2 | 1 | 1465979047 |
+------+----------+------------+
2 rows in set (0.00 sec)
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| total | 2 |
| total_found | 2 |
| time | 0.000 |
| keyword[0] | test |
| docs[0] | 3 |
| hits[0] | 5 |
| keyword[1] | document |
| docs[1] | 2 |
| hits[1] | 2 |
+---------------+----------+
9 rows in set (0.00 sec)

在上述结果可以看出,Sphinx发现从我们的2场比赛test1索引我们的测试句子。 该SHOW META;命令显示以及在句子中每个关键字的点击。

让我们搜索一些关键字。

CALL KEYWORDS ('test one three', 'test1', 1);

你应该得到类似下面的东西。

Output+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1 | test | test | 3 | 5 |
| 2 | one | one | 1 | 2 |
| 3 | three | three | 0 | 0 |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)

在结果上面可以看到,在test1的指数,Sphinx发现:

  • 5个匹配在3个文档中的关键字'test'
  • 2在1个文档中匹配关键字“1”
  • 0匹配0个文档中的关键字'three'

现在你可以离开MySQL shell了。

quit

结论

在本教程中,我们向您展示了如何安装Sphinx,并使用SphinxQL和MySQL进行简单搜索。

您还可以找到官方对于PHP,Perl,Python和Ruby和Java本地SphinxAPI实现 。 如果你正在使用的NodeJS,你也可以使用该SphinxAPI包 。

通过使用Sphinx,您可以轻松地添加自定义搜索到您的网站。 有关使用Sphinx的更多信息,请访问该项目的网站 。

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...