LNMP+sphinx实现大数据秒查

Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。

Sphinx的特性如下:

a)  高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒);

b)  高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒);

c)  可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档);

d)  提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;

e)  支持分布式搜索;

f)  支持短语搜索

g)  提供文档摘要生成

h)  可作为MySQL的存储引擎提供搜索服务;

i)  支持布尔、短语、词语相似度等多种检索模式;

j)  文档支持多个全文检索字段(最大不超过32个);

k)  文档支持多个额外的属性信息(例如:分组信息,时间戳等);

l)  支持断词;

虽然mysql的MYISAM提供全文索引,但是性能却不敢让人恭维,另外数据库毕竟不是很善于做这样的事情,我们需要把这些活让给更适合的程序去做,减少数据库的压力。因此采用Sphinx来做mysql的全文索引工具是一个很好的选择。这个星期主要来学习这个这个工具的使用,下面将学习过程大致的记录一下,做个备忘,也希望能对学习这个工具的其他朋友有所启发。

  1. 安装sphinx
wget http://sphinxsearch.com/files/sphinx-2.2.11-release.tar.gz
tar -xf sphinx-2.2.11-release.tar.gz  && cd sphinx-2.2.11-release
./configure  --prefix=/usr/local/spinx --with-mysql
make && make install
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
libsphinxclient 安装(PHP模块需要)
cd api/libsphinxclient
./configure –prefix=/usr/local/sphinx
make &&  make install

2.安装php扩展

wget http://pecl.php.net/get/sphinx-1.3.0.tgz
tar zxf sphinx-1.3.3.tgz && cd sphinx-1.3.3
./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinx/
make &&  make install

3.创建配置文件

cp /usr/local/sphinx/etc/sphinx-min.conf.dist  /usr/local/sphinx/etc/sphinx.conf
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
        type                    = mysql

        sql_host                = localhost
        sql_user                = root
        sql_pass                = www.123
        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
}

index test1
{
        source                  = src1
        path                    = /usr/local/spinx/var/data/test1
}

indexer
{
        mem_limit               = 32M
}

searchd
{
        listen                  = 9312
        listen                  = 9306:mysql41
        log                     = /usr/local/spinx/var/log/searchd.log
        query_log               = /usr/local/spinx/var/log/query.log
        read_timeout            = 5
        max_children            = 30
        pid_file                = /usr/local/spinx/var/log/searchd.pid
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        workers                 = threads # for RT to work
        binlog_path             = /usr/local/spinx/var/data
}

4.创建索引并启动

/usr/local/spinx/bin/indexer  -c /usr/local/spinx/etc/sphinx.conf --all
/usr/local/spinx/bin/searchd  -c /usr/local/spinx/etc/sphinx.conf

5.查询验证

cd /root/sphinx-2.2.11-release/api
python test.py  test
DEPRECATED: Do not call this method or, even better, use SphinxQL instead of an API
Query ‘test ‘ retrieved 3 of 3 matches in 0.000 sec
Query stats:
        ‘test‘ found 5 times in 3 documents
Matches:
1. doc_id=1, weight=2, group_id=1, date_added=2016-11-30 01:21:20
2. doc_id=2, weight=2, group_id=1, date_added=2016-11-30 01:21:20
3. doc_id=4, weight=1, group_id=2, date_added=2016-11-30 01:21:20
mysql> select * from documents;
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
| id | group_id | group_id2 | date_added          | title           | content                                                                   |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+
|  1 |        1 |         5 | 2016-11-30 01:21:20 | test one        | this is my test document number one. also checking search within phrases. |
|  2 |        1 |         6 | 2016-11-30 01:21:20 | test two        | this is my test document number two                                       |
|  3 |        2 |         7 | 2016-11-30 01:21:20 | another doc     | this is another group                                                     |
|  4 |        2 |         8 | 2016-11-30 01:21:20 | doc number four | this is to test groups                                                    |
+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+

参考网址: http://blog.csdn.net/wangjiuwang/article/details/52002172

http://www.cnblogs.com/findgor/p/5644540.html

http://www.sphinxsearch.org/sphinx-faq

时间: 2024-08-26 23:58:57

LNMP+sphinx实现大数据秒查的相关文章

Sphinx+Mysql+Php 12亿DNS数据秒查

最近得到一个接近12亿的全球ns节点的数据,本来想用来做一个全国通过dns反查域名然后进行全国范围的网站收集和扫描的,后来发现网站的数量不是很准确,加上一个人的精力和财力实在难以完成这样一个庞大的任务,就没有做下去,只留下了这个搭建的笔记.    文本格式,简单的文本搜索,速度太慢,一次搜索接近花掉5-10分钟时间,决定将其倒入数据库进行一次优化,速度应该能提升不到,电脑上只有AMP的环境,那么就决定将其倒入到mysql中,一开始使用Navicat进行倒入,刚好数据的格式是 ip,ns 这样的格

这可能是AI、机器学习和大数据领域覆盖最全的一份速查表

https://mp.weixin.qq.com/s?__biz=MjM5ODE1NDYyMA==&mid=2653390110&idx=1&sn=b3e5d6e946b719d08b67d9ebf88283fe&chksm=bd1c3d0d8a6bb41bf05a8ccc9f375528c7c5e4223b190acc9593082b50e17855d2ccdd0e8ac2&mpshare=1&scene=23&srcid=0110mg1nBdOA

专利:结构化大数据通信协议(2)

说明2:数据的唯一性是实现"数据全球通"的基础 在班.组这样的小环境中可以用每个人的姓名而区分出每一个人,然而在全国范围内,由于人数太多,重名的很多,因此仅靠姓名就不能准确无误地识别出每一个人.大数据时代以前的关系数据库中的数据只是应用于某个机构内部,因此各个数据就容易识别,然而如果把关系数据库中的数据放到大数据环境中,那么这些数据就成了不可识别的数据.在大数据环境中,有关人的所有数据都必须含有"身份证号",这是为了表明数据的唯一性. 关系数据库用"ID&

实战:上亿数据如何秒查(转)

最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查的质变.从修改SQL查询语句逻辑到决定创建存储 过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助. 数据背景 首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大.在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据的表,很多... (历史问题,当初实施无人监管,无人监控数据库这块的性能问题.ps:我刚入职不

实战:上亿数据如何秒查

最近在忙着优化集团公司的一个报表.优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查的质变.从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助. 数据背景 首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大.在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据的表,很多- (历史问题,当初实施无人监管,无人监控数据库这块的性能问题.ps:我刚入职不久-)

大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践

之前介绍过关于HBase 0.9.8版本的部署及使用,本篇介绍下最新版本HBase1.2.4的部署及使用,有部分区别,详见如下: 1. 环境准备: 1.需要在Hadoop[hadoop-2.7.3] 启动正常情况下安装,hadoop安装可参考LZ的文章 大数据系列之Hadoop分布式集群部署 2. 资料包  zookeeper-3.4.9.tar.gz,hbase-1.2.4-bin.tar.gz 2. 安装步骤: 1.安装zookeeper 1.解压zookeeper-3.4.9.tar.gz

MaxCompute助力北斗大数据,千寻位置3秒实现厘米级定位

摘要: 无人机.无人车--随着智能无人技术的兴起,背后的核心技术越加受到业界的关注.近日,全球最大地基增强系统运营商千寻位置成功研发出全球首个支持A-北斗的辅助定位平台FindNow, 大大缩短定位时间;结合使用阿里云大计算力量的千寻云踪-位置数据接入服务,为全国智能产业提供厘米级乃至毫米级高精度位置定位,快速+精准定位,为汽车导航.精准农业.防灾减灾等行业正迎来新的机遇. 原文地址:http://click.aliyun.com/m/43994/ 无人机.无人车--随着智能无人技术的兴起,背后

阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读读后感

阅读文章:阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读 文章网址:https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247488245&idx=1&sn=1c70a32f11da7916cb402933fb65dd9f&chksm=e9292ffade5ea6ec7c6233f09d3786c75d02b91a91328b251d8689e8dd8162d55632a3ea61a1&scene=2

Bit-map法处理大数据问题

问题引入: 1.给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?2.给定一个千万级别数据量的整数集合,判断哪些是重复元素.3.给定一个千万级别数据量的整形数组,对其进行排序.4.在5亿个整数中找出不重复的整数(注意,内存不足以容纳这5亿个整数). 从数据量上看,使用常规的解法(普通排序算法,逐个比较等)明显不合适,所以这里我们引入一个新的解法,就是Bitmap. Bitmap就是用一个bit位来标记某个元素对应的Value,