全文检索使用sphinx实战

Sphinx是一个开源搜索引擎,允许全文搜索。最着名的是非常有效地对大数据执行搜索。要索引的数据通常可以来自非常不同的来源:SQL数据库,纯文本文件,HTML文件,邮箱等。 Sphinx的一些主要功能包括:

  • 高索引和搜索性能
  • 高级索引和查询工具
  • 高级结果集后处理
  • 经验证的可扩展性,高达数十亿个文档,TB级数据和每秒数千个查询
  • 轻松集成SQL和XML数据源,SphinxQL,SphinxAPI或SphinxSE搜索接口
  • 通过分布式搜索轻松扩展

优势

1.高速建索引

2.高性能搜索 搜索2-4G数据不超过0.1秒

3.处理海量数据

下载地址

https://sphinxsearch.com/

一.安装sphinx

centos下载文档https://sphinxsearch.com/docs/manual-2.3.2.html#installing-redhat

全文检索使用sphinx实战_第1张图片

 

 

sphinx-2.2.1-1.rhel6.x86_64.rpm下载地址 

 

 

全文检索使用sphinx实战_第2张图片

 

全文检索使用sphinx实战_第3张图片

二.创建测试数据库

看到上面已经报错了 需要先建立数据库

mysql -u root -p连接数据库

 

报错了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

 

可以到宝塔面板mysql配置上添加

全文检索使用sphinx实战_第4张图片

重启mysql

全文检索使用sphinx实战_第5张图片

再次登录即可

全文检索使用sphinx实战_第6张图片

可以先修改数据库密码

use mysql;

update user set password=password("你的密码") where user="root";

flush privileges;

然后重启mysql;

 

导入数据库 SOURCE /usr/share/doc/sphinx-2.2.1/example.sql;

全文检索使用sphinx实战_第7张图片

 

三.配置sphinx

全文检索使用sphinx实战_第8张图片

 cd /etc/sphinx/

 

vi sphinx.conf

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
	type			= mysql

	sql_host		= localhost
	sql_user		= 数据库账号
	sql_pass		= 数据库密码
	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

	sql_query_info		= SELECT * FROM documents WHERE id=$id
}


index test1
{
	source			= src1
	path			= /var/lib/sphinx/test1
	docinfo			= extern
	charset_type		= utf-8
}


index testrt
{
	type			= rt
	rt_mem_limit		= 32M

	path			= /var/lib/sphinx/testrt
	charset_type		= utf-8

	rt_field		= title
	rt_field		= content
	rt_attr_uint		= gid
}


indexer
{
	mem_limit		= 128M
}


searchd
{
	listen			= 9312
	listen			= 9306:mysql41
	log			= /var/log/sphinx/searchd.log
	query_log		= /var/log/sphinx/query.log
	read_timeout		= 5
	max_children		= 30
	pid_file		= /var/run/sphinx/searchd.pid
	max_matches		= 1000
	seamless_rotate		= 1
	preopen_indexes		= 1
	unlink_old		= 1
	workers			= threads # for RT to work
	binlog_path		= /var/lib/sphinx/
}

四.管理索引

sudo indexer --all

全文检索使用sphinx实战_第9张图片

配置定时任务

crontab -l查看定时任务

crontab -e编辑定时任务

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


 

五.启动sphinx

 

 

 

六.测试搜索功能

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

全文检索使用sphinx实战_第10张图片

解决办法

全文检索使用sphinx实战_第11张图片

全文检索使用sphinx实战_第12张图片

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

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

全文检索使用sphinx实战_第13张图片

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

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

 

 

 

你可能感兴趣的:(sphinx)