`
z416177937
  • 浏览: 5651 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Sphinx增量索引

 
阅读更多

Sphinx+Mysql+中文分词安装

在实际应用中往往有这么一种情况,数据库数据很大,比如我们的歌曲表,如果我们每次都去更新整个表的索引,对系统得开销将非常大,显然这是不合适,这时我们会发现,每天我们需要更新的数据相比较而言较少,在这种情况下我们就需要使用“主索引+增量索引”的模式来实现实时更新的功能。

这个模式实现的基本原理是设置两个数据源和两个索引,为那些基本不更新的数据建立主索引,而对于那些新增的数据建立增量索引。主索引的更新频率我们可以设置的长一些(可以设置在每天的午夜进行更新),而增量索引的更新频率,我们可以将时间设置的很短(几分钟左右),这样在用户搜索的时候,我们可以同时查询这两个索引的数据。

下面,我们通过一个简单的例子来描述一下怎样实现这种模式

以sphinx.conf中默认的数据为例:

1.先在mysql中插入一个计数表和两个索引表

  1. CREATE TABLE sph_counter(
  2.     counter_id INTEGER PRIMARY KEY NOT NULL,
  3.     max_doc_id INTEGER NOT NULL
  4. );

//主索引使用(确认之前是否已经建立过该表,如果已经建立,这里就不需要重新建了)

  1. CREATE TABLE `sphinx` (  
  2. `id` int(11) NOT NULL,  
  3. `weight` int(11) NOT NULL,  
  4. `query` varchar(255) NOT NULL,  
  5. `CATALOGID` INT NOT NULL,  
  6. `EDITUSERID` INT NOT NULL,  
  7. `HITS` INT NULL,  
  8. `ADDTIME` INT NOT NULL,   KEY 
  9. `Query` (`Query`) 
  10. ) ENGINE=SPHINX DEFAULT CHARSET=utf8CONNECTION='sphinx://localhost:3312/test1'

//增量索引使用

  1. CREATE TABLE `sphinx1` (   
  2. `id` int(11) NOT NULL,   
  3. `weight` int(11) NOT NULL,   
  4. `query` varchar(255) NOT NULL,   
  5. `CATALOGID` INT NOT NULL,   
  6. `EDITUSERID` INT NOT NULL,   
  7. `HITS` INT NULL,   
  8. `ADDTIME` INT NOT NULL,   KEY
  9. `Query` (`Query`)
  10. )ENGINE=SPHINX DEFAULT CHARSET=utf8 CONNECTION='sphinx://localhost:3312/ test1stemmed '

2.修改sphinx.conf

  1. source src1
  2. {
  3. sql_query_pre = SET NAMES utf8
  4. sql_query_pre = SET SESSION query_cache_type=OFF
  5. sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
  6. sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents \
  7. WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )       
  8. ... //其他可以默认
  9. }
  10.  
  11. // 注意:sql_query_pre的个数需和src1对应,否则可能搜索不出相应结果
  12. source src1throttled : src1
  13. {
  14. sql_ranged_throttle = 100
  15. sql_query_pre = SET NAMES utf8
  16. sql_query_pre = SET SESSION query_cache_type=OFF
  17. sql_query_pre =
  18.  
  19.              sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents \
  20. WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
  21. }
  22.  
  23. index test1 //主索引
  24. {
  25. source = src1
  26. ...
  27. }
  28.  
  29. index test1stemmed : test1 //增量索引
  30. {
  31. source = src1throttled
  32. ...
  33. }

3.重建索引

  1. /usr/local/sphinx/bin/searchd --stop
  2. /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --all
  3. /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf

插入测试数据

  1. INSERT INTO `test`.`documents` (
  2. `id` ,
  3. `group_id` ,
  4. `group_id2` ,
  5. `date_added` ,
  6. `title` ,
  7. `content`
  8. )
  9. VALUES (
  10. NULL , '3''11'NOW( ) , '索引合并''合并两个已有的索引比重新对所有数据做索引更有效率,而且有时候必须这样做(例如在“ 主索引+增量索引”分区模式中应合并主索引和增量索引,而不是简单地重新索引“主索引对应的数据)。因此indexer有这个选项。合并索引一般比重新索引快,但在大型索引上仍然不是一蹴而就。基本上,待合并的两个索引都会被读入内存一次,而合并后的内容需要写入磁盘一次。例如,合并100GB和1GB的两个索引将导致202GB的IO操作(但很可能还是比重新索引少)'
  11. );

执行

  1. SELECT doc . *
  2. FROM documents doc
  3. JOIN sphinx ON ( doc.id = sphinx.id )
  4. WHERE query = '索引'

你会发现你刚添加的数据没有被检索出来
然后执行:

  1. SELECT doc.* FROM documents doc join sphinx1 on(doc.id=sphinx1.id) where query='索引'

你会发现数据是空的,这时我们就需要来更新增量索引了。

通过执行:

  1. /usr/local/sphinx/bin/indexer --rotate --config /usr/local/sphinx/etc/sphinx.conf test1stemmed

命令来更新增量索引(正式使用时,我们可以将该命令配置到系统计划任务中,每隔几分钟执行一次)
--rotate: 该参数可以使我们在不需要停止searchd的情况下,直接加载索引
执行完命令该命令后,我们再来查看一下增量索引的数据

  1. SELECT doc.* FROM documents doc join sphinx1 on(doc.id=sphinx1.id) where query='索引'

你会发现新添加的数据被检索出来的。

主索引的更新:

  1. /usr/local/sphinx/bin/indexer --rotate --config /usr/local/sphinx/etc/sphinx.conf test1
  1. collected 997 docs, 1.4 MB
  2. sorted 0.3 Mhits, 100.0% done
  3. total 997 docs, 1430054 bytes
  4. total 1.428 sec, 1001459.38 bytes/sec, 698.19 docs/sec

(我们可以设置成每天的午夜执行)

只有在更新了主索引后,结果才会被更新

  1. SELECT doc.* FROM documents doc join sphinx on(doc.id=sphinx.id) where query='索引'

我们也可以通过合并索引的方式使主索引的数据保持更新

  1. /usr/local/sphinx/bin/indexer --merge test1 test1stemmed  --rotate

可以将增量索引test1stemmed合并到主索引test1中去

为创建2个shell脚本,一个用来创建主索引、一个用来创建增量索引(此步可以省略)

1.创建主索引脚本build_main_index.sh

  1. #!/bin/sh
  2. #/usr/local/sphinx/bin/searchd --stop
  3. /usr/local/sphinx/bin/indexer test1 --config /usr/local/sphinx/etc/sphinx.conf >> /var/log/sphinx/mainindexlog
  4. #/usr/local/sphinx/bin/searchd

2.创建增量索引脚本build_delta_index.sh

  1. #!/bin/sh
  2. #/usr/local/sphinx/bin/searchd --stop
  3. /usr/local/sphinx/bin/indexer test1stemmed  --config /usr/local/sphinx/etc/sphinx.conf --rotate>> /var/log/sphinx/deltaindexlog
  4. /usr/local/sphinx/bin/indexer --merge test1 test1stemmed --config /usr/local/sphinx/etc/sphinx.conf --rotate >> /var/log/sphinx/deltaindexlog
  5. #/usr/local/sphinx/bin/searchd

每隔5分钟进行索引增量合并,每天2:30重建索引

  1. */5 * * * * /bin/sh /opt/shell/build_delta_index.sh > /dev/null 2>&1
  2. 30 2* * * /bin/sh /opt/shell/build_main_index.sh > /dev/null 2>&1

每周一至周六上早6点增量合并,同日重建索引

  1. 1 6 * * 1-6 /bin/sh /opt/shell/build_delta_index.sh > /dev/null 2>&1
  2. 1 6 * * 7 /bin/sh /opt/shell/build_main_index.sh > /dev/null 2>&1

参考:
http://www.coreseek.com/uploads/pdf/sphinx_doc_zhcn_0.9.pdf

 

come from here

分享到:
评论

相关推荐

    windows 下 mssql sphinx 增量索引配置文件

    windows 下 sphinx 增量索引配置文件 mssql

    sphinx增量索引的一个问题

    但最近发现增量的总是搜索不到,今天看了下运行日志,有如下提示: [Sun Apr 17 19:30:01.876 2011] [ 3400] WARNING: rotating index ‘news_delta’: cur to old rename failed: rename /dev/shm/sphinx/data/news...

    使用Sphinx对索引进行搜索

    Sphinx对索引进行搜索主要分为以下几步:1、用户输入查询语句。 2、对查询语句进行词法分析,语法分析,及语言处理。 3、搜索索引,得到符合语法树的文档。... 您可能感兴趣的文章:sphinx增量索引的一个问题

    Sphinx使用手册

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    sphinx全文检索

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    sphinx-2.0.8-release.tar.gz源码包

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    sphinx-2.2.10-release.tar

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1.

    2、创建Sphinx主索引文件、增量索引文件存放目录 12 3、创建Sphinx配置文件 13 4、初始化sphinx.conf中配置的全部索引 13 5、创建两个shell脚本,一个用来创建主索引、一个用来创建增量索引。 13 ⑴、主索引更新脚本...

    sphinx-2.0.8-1.rhel6.i386.rpm下载

    Sphinx是一个基于SQL的全文检索引擎,可以结合...Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    Sphinx全文检索引擎 for Windows v2.0.6

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括:高速索引 (在新款CPU...

    Sphinx全文检索引擎 for Windows v2.0.6.zip

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款...

    Sphinx+MySQL_jgsj

    前言:本文阐述的是一款经过生产环境检验的千万...Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟, 创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

    Sphinx全文检索引擎 for Linux v2.0.6

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括:高速索引 (在新款CPU...

    Sphinx v3.3.1全文检索引擎 for Windows_支持分布式搜索.zip

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款CPU...

    Sphinx全文检索引擎for Linux v2.0.6.rar

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款...

    ts-datetime-delta:通过 Thinking Sphinx 的日期时间列管理增量索引

    Thinking Sphinx 的日期时间增量安装您需要 Thinking Sphinx 1.3.0 或更高版本(自此 gem 的 2.0.0 版本以来,现在支持 v3)。 gem install ts-datetime-delta 在您的 Gemfile 中,您可以像这样使用它: gem 'ts-...

    Sphinx全文检索引擎 for Windows-PHP

    Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的主要特性包括: 高速索引 (在新款CPU...

    PhpSou搜索引擎 v1.2 build 1226 GBK

    PhpSou搜索引擎程序新增搜索无数据自动调用百度数据仿百度搜索引擎,仿谷歌搜索引擎软件蜘蛛组件包括三大功能模块:链接采集、网页分析、无效...增加增量索引,数据可实时更新 修正蜘蛛反复抓取问题,增加随机抓取功能

    PhpSou垂直搜索引擎 1.2 GBK 20111226.rar

    增加增量索引,数据可实时更新 修正蜘蛛反复抓取问题,增加随机抓取功能 请务删除安装文件中的phpsou.sql文件,请一并上传到空间,安装完成后可删除。 已经使用本程序的请注意:请在确保你原有数据备份的情况下...

Global site tag (gtag.js) - Google Analytics