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_delta.spa to /dev/shm/sphinx/data/news_delta.old.spa failed: No such file or directory
[Sun Apr 17 19:30:01.881 2011] [ 3400] WARNING: rotating index 'article_delta': cur to old rename failed: rename /dev/shm/sphinx/data/article_delta.spa to /dev/shm/sphinx/data/article_delta.old.spa failed: No such file or directory
为提高增量索引速度,我将增量索引存放在/dev/shm中,看了下/dev/shm/sphinx/data/目录下的内容: -rw-r--r-- 1 root root 385762 Apr 17 19:21 article_delta.new.spd -rw-r--r-- 1 root root 3713 Apr 17 19:21 article_delta.new.sph -rw-r--r-- 1 root root 46260 Apr 17 19:21 article_delta.new.spi -rw-r--r-- 1 root root 0 Apr 17 19:21 article_delta.new.spk -rw-r--r-- 1 root root 0 Apr 17 19:21 article_delta.new.spm -rw-r--r-- 1 root root 261402 Apr 17 19:21 article_delta.new.spp
奇怪,应该要有article_delta.spd等文件,不应该是.new的文件。 增量索引时是使用--rotate参数的, 复制代码 代码如下: bin/indexer --rotate news_delta bin/indexer --rotate article_delta
在rotate时,需要将原article_delta.spa重命名为article_delta.old.spa,然后将article_delta.new.spa重命名为article_delta.spa,再通知searchd重启完成rotate。
想起应该是前几天凌晨重启过机器,原文件都丢了,导致无法rotate:(
解决方法: 运行:bin/indexer article_delta 创建了article_delta.spd,sph等文件。
再运行:bin/indexer article_delta --rotate 运行日志提示:rotating index 'article_delta': success 正常了!
把要做增量索引的命令写了个脚本,放在rc.local中,这样重启过机器就不会再出现这种问题了。 复制代码 代码如下: echo "start:" $(date
"%y-%m-%d %H:%M:%S") cd /usr/local/coreseek/bin ./indexer news_delta ./indexer article_delta echo "end:" $(date
"%y-%m-%d %H:%M:%S")扫描二维码,输入您要打赏的金额SAP HANA 增量合并操作 (Delta Merge Operation) - 为程序员服务
SAP HANA 增量合并操作 (Delta Merge Operation)
我们都知道, SAP HANA 的数据更新方式是采用增量合并操作(Delta Merge Operation)的方式,原始数据在 Main 区域,新增加的数据在一个 Delta 区域,通过不断合并 Main 和 Delta 形成新的 Main,比普通的修改方式在性能上有着很大的优势。
今天看了一下整个增量合并操作中数据的读写和合并过程,感觉还是蛮有意思的。对很多应用场景下的数据增删修改合并操作有着很好的借鉴意义。
我们先来看一幅图:
这幅图很好的总结了整个增量合并的过程,我们一步一步来看:
Before Merge
1)Main 中存放原始数据,Delta 中存放增量数据;
2)所有写操作在 Delta 中进行;
3)读操作可读取 Main 和 Delta 中的数据。
During Merge
1)合并操作从 Main 中数据和 Delta 中已提交的数据进行合并,放入 Main New 中;
2)Delta 中未提交的数据复制到 Delta New 中;
3)所有写操作在 Delta New 中进行;
4)读操作可读取 Main,Delta 和 Delta New 中数据;
5)Delta New 中若有新提交的数据也通过合并操作合并到 Main New 中。
After Merge
1)删除 Main 和 Delta,留下 Main New 和 Delta New;
2)所有写操作在 Delta New 中进行;
3)读操作可读取 Main New 和 Delta New 中的数据;
4)此时的 Main New 和 Delta New 即为下次 Merge 的 Main 和 Delta。
整个 Delta Merge Operation 有以下几个特点:
1.异步发生
2.合并操作进行时,列式数据表仍可用于读取和写入操作(因为有双重缓冲,操作过程中表被锁定的时间很短)
3.增量合并后,增量存储不会清空
4.主要存储会在合并期间被重新排序
5.只有主存储区会被持久化到磁盘
Delta Merge Operation 的代价也是较高的,主要是因为:
1.需要大量的内存空间(当 Main 和 Main New 同时存在时至少需要2倍的内存消耗)
2.主存储区的数据要被重新写入内存,消费CPU资源,并且少量更改也会导致主存储区持久化到磁盘,I/O负担较重
当然也有特殊的情况,例如只进行 memory-only merges,这样做只影响内存中的数据,不进行最后的持久化,或者分区,每次只对受到影响的分区进行合并操作。
《AGSTF002 – SAP HANA Technology Fundamentals》
//Coding Life.
原文地址:, 感谢原作者分享。
您可能感兴趣的代码sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法
编辑:www.fx114.net
本篇文章主要介绍了"sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法",主要涉及到sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法方面的内容,对于sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法感兴趣的同学可以参考一下。
一.sphinx增量索引的设置
&&&数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到。全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少。例如。原来的数据有几百万条,而新增的只是几千条。这样就可以使用“主索引+增量索引”的模式来实现近乎实时更新的功能。
&&&&这个模式实现的基本原理是设置两个数据源和两个索引,为那些基本不更新的数据建立主索引,而对于那些新 增的数据建立增量索引。主索引的更新频率可以设置的长一些(例如设置在每天的午夜进行),而增量索引的更新频率,我们可以将时间设置的很短(几分钟左 右),这样在用户搜索的时候,我们可以同时查询这两个索引的数据。
&&&&使用“主索引+增量索引”方法有个简单的实现,在数据库中增加一个计数表,记录每次重新构建主索引时,被索引表的最后一个数据id,这样在增量索引时只需要索引这个id以后的数据即可,每次重新构建主索引时都更新这个表。
&&& 测试条件:以默认的sphinx.conf配置为例,数据库表的数据也以 example.sql为例。
1.先在mysql中插入一个计数表和两个索引表
CREATETABLEsph_counter(&
&counter_id&INTEGERPRIMARYKEYNOTNULL,&
&max_doc_id&INTEGERNOTNULL);
2.修改sphinx.conf
source main_src{&&&&&& type&&&&&&&&&&&&&&&&= mysql&&&&&& sql_host&&&&&&&&&&&&= localhost&&&&&& sql_user&&&&&&&&&&& = yourusername& & && sql_pass & & & &&&& = yourpassword& & && sql_db & & & &
& && = test&& //你所用的数据库& & && sql_port & & & & && = 3306 //所用端口,默认是3306 &&&&&&&&
sql_query_pre&&&&&& = SET NAMES utf8&&&&&&
sql_query_pre&&&&&& = SET SESSION query_cache_type=OFF&&&&&& #下面的语句是更新sph_counter表中的 max_doc_id。&&&&&&
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents&&&&&
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title,\&&&&&&&&&&&&&&&& content FROM documents \&&&&&&&&&&&&&&WHERE id&=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )& &
// 注意:delta_src 中的sql_query_pre的个数需和main_src 对应,否则可能搜索不出相应结果
source delta_src: main_src{&&&&&&&& sql_ranged_throttle = 100&&&&&&&& sql_query_pre&&&&&& = SET NAMES utf8&&&&&&&& sql_query_pre&&&&&& = SET SESSION query_cache_type=OFF&&&&&&&&&&&sql_query&&&&&&&&&&
= SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title,&content FROM documents \&&&&&&&&&&&WHERE id&( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )}
index main //主索引{&&&&&& source&&&&&&&&&& = main_src&&&&&& path&&&&&&&&&&& &= /path/to/main&&&& # example: & /usr/local/sphinx/var/data/main&&&&& .............&&&&&& charset_type&&&& = utf-8&&& #这个是支持中文必须要设置的&&&&&& chinese_dictionary =/usr/local/sphinx/etc/xdict&&&&&&
#..........其它可以默认}
//delta可全部复制主索引,然后更改source 和path如下
index delta: main //增量索引{&&&&&&&& source = delta_src&&&&&&&& path&&&& = /path/to/delta&&& # example:& /usr/local/sphinx/var/data/delta…&&&&}
其它的配置可都用默认的,如果你设置了分布式检索的索引,那么更改下对应的索引名称即可。
3.重新建立索引:
如果sphinx正在运行,那么首先停止运行,然后,根据sphinx.conf配置文件来建立所有索引,最后,启动服务
/usr/local/sphinx/bin/searchd --stop/usr/local/sphinx/bin/indexer -c& /usr/local/sphinx/etc/sphinx.conf --all/usr/local/sphinx/bin/searchd -c& /usr/local/sphinx/etc/sphinx.conf
P.S /usr/local/sphinx/bin/indexer -c& /usr/local/sphinx/etc/sphinx.conf --all--rotate&&
这样就不需要停searchd,索引后也不再需要重启searchd了。
如果想测试增量索引是否成功,往数据库表中插入数据,查找是否能够检索到,这个时候检索应该为空,然后,单独重建 delta索引
/usr/local/sphinx/bin/indexer -c /usr/lcoal/sphinx/etc/sphinx.conf
查看是否将新的记录进行了索引。如果成功,此时,再用 /usr/local/sphing/bin/search 工具来检索,能够看到,在main索引中检索到的结果为0,而在delta中检索到结果。当然,前提条件是,检索的词,只在后来插入的数据中存在。
接下来的问题是如何让增量索引与主索引合并
4.索引合并
合并两个已有索引 有时比 重新索引所有数据有效,虽然,索引合并时,待合并的两个索引都会被读入内存一次,合并后的内容需写入磁盘一次,即,合并100GB和1GB的两个所以,将导致202GB的IO操作
命令原型:& indexer --merge DSTINDEX& SRCINDEX [--rotate]&& 将SRCINDEX合并到 DSTINDEX ,所以只有DSTINDEX会改变,如果两个索引都正在提供服务,那么 -- rotate 参数是必须的。例如:将delta合并到main中。
indexer --merge main delta& &&
5.索引自动更新
需要使用到脚本。
建立两个脚本:build_main_index.sh 和 build_delta_index.sh.
build_main_index.sh:
# 停止正在运行的searchd
/usr/local/sphinx/bin/searchd -c /usr/local/sphinx/etc/mersphinx.conf& --stop && /usr/local/sphinx/var/log/sphinx/searchd.log
#建立主索引
/usr/local/sphinx/bin/indexer -c& /usr/local/sphinx/etc/mersphinx.conf main && /usr/local/sphinx/var/log/sphinx/mainindex.log
#启动searchd守护程序
/usr/local/sphinx/bin/searchd && /usr/local/sphinx/var/log/sphinx/searchd.log
build_delta_index.sh
#停止sphinx服务,将输出重定向
/usr/local/sphinx/bin/searchd –stop&&/usr/local/sphinx/var/log/sphinx/searchd.log
#重新建立索引delta ,将输出重定向
/usr/local/sphinx/bin/indexerdelta
–c /usr/local/sphinx/etc/sphinx.conf&&/usr/lcoal/sphinx/var/log/sphinx/deltaindex.log
#将delta合并到main中
/usr/local/sphinx/bin/indexer –merge main delta –c /usr/local/sphinx/etc/sphinx.conf && /usr/lcoal/sphinx/var/log/sphinx/deltaindex.log
/usr/local/sphinx/bin/searchd&&/usr/local/sphinx/var/log/sphinx/searchd.log
脚本写好后,需要编译 chmod +x filename 这样才能运行。即
chmod +x build_main_index.sh
chmod +x build_delta_index.sh
最后,我们需要脚本能够自动运行,以实现,delta索引每5分钟重新建立,和main索引只在午夜2:30时重新建立。
使用crontab 命令 这有俩个地方可作参考 crontab&crontab文件
crontab -e 来编辑 crontab文件,如果之前没有使用,会是一个空的文件。写下下面两条语句
*/30 * * * *& /bin/sh /usr/local/sphinx/etc/build_delta_index.sh & /dev/null 2&&1
30 2 * * * /bin/sh /usr/local/sphinx/etc/build_main_index.sh & /dev/null 2&&1
第一条是表示每30分钟运行 /usr/local/sphinx/etc/下的build_delta_index.sh 脚本,输出重定向。
第二条是表示 每天的 凌晨2:30分运行 /usr/local/sphinx/etc下的build_main_inde.sh 脚本,输出重定向。
关于前面的 5个值的设置,在上面的crontab文件中有详细的描述。关于重定向的解释,请看最上面的Crontab笔记 ,也有crontab的介绍。
保存好后:重新启动服务
[root@test1 init.d]# service crond stop
[root@test1 init.d]# service crond start
/etc/init.d/crontab&& start
到现在为止,如果脚本写的没有问题,那么build_delta_index.sh将每30分钟运行一次,而build_main_index.sh将在凌晨2:30分才运行。
要验证的话,在脚本中,有将输出重定向到相关的文件,可以查看下文件中的记录是否增多,也可以看下 /usr/local/sphinx/var/log下的 searchd.log 中,每次重建索引都会有记录。
1.索引合并问题,前面已经解释过,两个索引合并时,都要读入,然后还要写一次硬盘,IO操作量很大。而在php API调用时,Query($query,$index)中$index可以设置多个索引名,如Query($query,&delta&),也就没有必要一定将两个索引合并,或者,合并的次数不用那么多。
2.还有一个是没有尝试过的,把增量索引存放到共享内存中(/dev/shm)以提高索引性能,减少系统负荷。
关于PHP API
如何能够顺利通过PHP页面来进行检索。
首先,在服务器上searchd 必须是运行的。
然后,根据test.php来修改下。
运行,连接时会出现一个很大的问题 errno =13 permission deny. 最后,查到一个英文的网页,是因为SElinux的原因,关于SELinux在网上能搜到。没有很好的解决办法,只能把SELinux设置为不用。使用的命令有下面两个: setenforce 在 /usr/bin 下
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
合并两个已有的索引比重新对所有数据做索引更有效率,而且有时候必须这样做(例如在“
主索引+增量索引”分区模式中应合并主索引和增量索引,而不是简单地重新索引“主索引
对应的数据)。因此indexer有这个选项。合并索引一般比重新索引快,但在大型索引上仍
然不是一蹴而就。基本上,待合并的两个索引都会被读入内存一次,而合并后的内容需要写
入磁盘一次。例如,合并100GB和1GB的两个索引将导致202GB的IO操作(但很可能还
是比重新索引少)
基本的命令语法如下:
indexer --merge DSTINDEX SRCINDEX[--rotate]
SRCINDEX的内容被合并到DSTINDEX中,因此只有DSTINDEX索引会被改变。若
DSTINDEX已经被searchd用于提供服务,则--rotate参数是必须的。最初设计的使用模式是,
将小量的更新从SRCINDEX合并到DSTINDEX中。因此,当属性被合并时,一旦出现了重
复的文档ID,SRCINDEX中的属性值更优先(会覆盖DSTINDEX中的值)。不过要注意,
“旧的”关键字并不会被自动删除。例如,在DSTINDEX中有一个叫做“old”的关键字与文
档123相关联,而在SRCINDEX中则有关键字“new”与同一个文档相关,那么在合并后用
这两个关键字都能找到文档123。您可以给出一个显式条件来将文档从DSTINDEX中移除,
以便应对这种情况,相关的开关是--merge-dst-range:
indexer --merge main delta--merge-dst-range deleted 00
这个开关允许您在合并过程中对目标索引实施过滤。过滤器可以有多个,只有满足全部过滤
条件的文档才会在最终合并后的索引中出现。在上述例子中,过滤器只允许“deleted”为0
的那些条件通过,而去除所有标记为已删除(“deleted”)的记录(可以通过调用
UpdateAttributes() 设置文档的属性)。
去旧(强行更新):
情景描述:假设有一旧关键字“去钓鱼”,与论坛贴子“周末的活动”相关联,用“去钓鱼”可以搜索到这篇帖子。之后楼主把贴子关键字部分改成了“去河边钓鱼”。如果用sphinx的indexer生成增量索引bbsattend,然后用indexer--merge bbs bbsattend--rotate合成到主索引bbs后。用“去河边钓鱼”搜不到结果,用“去钓鱼”可以搜到“去河边钓鱼”的结果。
解决办法:加--merge-killists option(选项)
indexer --merge bbs bbsattend--rotate --merge-killists
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:sphinx实现增量索引 分布式索引几个例子
增量索引,其实就是增加的内容,例如:存款有100块,今天挣了10块,这10块就是增量了
分布式索引,可以这样理解,想开公司钱不够,需要向很多人借钱。也就是把大家钱集中一起使用。一,测试表和数据
mysql& desc sph_
+------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| counter_id | int(11) | NO | PRI | NULL | |
| max_doc_id | int(11) | NO | | NULL | |
+------------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | | NULL | |
| create_time | datetime | NO | | NULL | |
| product_name | varchar(20) | NO | | NULL | |
| summary | text | NO | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql& select *
+----+------------+---------------------+----------------+--------------+
| id | user_id | create_time | product_name | summary |
+----+------------+---------------------+----------------+--------------+
00:24:54 | tank is 坦克 | 技术总监 |
00:24:54 | tank is 坦克 | 技术经理 |
00:24:54 | tank is 坦克 | DNB经理 |
00:24:54 | tank is 坦克 | 运维总监 |
+----+------------+---------------------+----------------+--------------+
4 rows in set (0.00 sec)
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| user_id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql& select *
+------------+------------+
| user_id | username |
+------------+------------+
| tank张二 |
| tank张一 |
| tank张 |
+------------+------------+
4 rows in set (0.00 sec)
二,sphinx.conf配置
source myorder
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM orders
sql_query =
SELECT a.id, a.user_id,b.username, UNIX_TIMESTAMP(a.create_time) AS create_time, a.product_name, a.summary
FROM orders a left join users b on a.user_id = b.user_id
sql_attr_uint = user_id
sql_field_string = username
sql_field_string = product_name
sql_attr_timestamp = create_time
sql_ranged_throttle = 0
#sql_query_info = SELECT * FROM orders WHERE id=$id
source moreorder : myorder
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query =
SELECT a.id, a.user_id,b.username, UNIX_TIMESTAMP(a.create_time) AS create_time, a.product_name, a.summary
FROM orders a left join users b on a.user_id = b.user_id where a.id & ( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
sql_attr_uint = user_id
sql_field_string = username
sql_field_string = product_name
sql_attr_timestamp = create_time
sql_ranged_throttle = 0
#sql_query_info = SELECT * FROM orders WHERE id=$id
index myorder
source = myorder
path = /usr/local/sphinx2/var/data/myorder
docinfo = extern
morphology = none
min_word_len = 1
#charset_type = zh_cn.utf-8
html_strip = 1
charset_table = U+FF10..U+FF19-&0..9, 0..9, U+FF41..U+FF5A-&a..z, U+FF21..U+FF3A-&a..z,A..Z-&a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6-&U+00E0..U+00F6,U+00E0..U+00F6, U+00D8..U+00DE-&U+00F8..U+00FE, U+00F8..U+00FE, U+0100-&U+0101, U+0101,U+0102-&U+0103, U+0103, U+0104-&U+0105, U+0105, U+0106-&U+0107, U+0107, U+0108-&U+0109,U+0109, U+010A-&U+010B, U+010B, U+010C-&U+010D, U+010D, U+010E-&U+010F, U+010F,U+0110-&U+0111, U+0111, U+0112-&U+0113, U+0113, U+0114-&U+0115, U+0115, U+0116-&U+0117,U+0117, U+0118-&U+0119, U+0119, U+011A-&U+011B, U+011B, U+011C-&U+011D, U+011D,U+011E-&U+011F, U+011F, U+0130-&U+0131, U+0131, U+0132-&U+0133, U+0133, U+0134-&U+0135,U+0135, U+0136-&U+0137, U+0137, U+0139-&U+013A, U+013A, U+013B-&U+013C, U+013C,U+013D-&U+013E, U+013E, U+013F-&U+0140, U+0140, U+0141-&U+0142, U+0142, U+0143-&U+0144,U+0144, U+0145-&U+0146, U+0146, U+0147-&U+0148, U+0148, U+014A-&U+014B, U+014B,U+014C-&U+014D, U+014D, U+014E-&U+014F, U+014F, U+0150-&U+0151, U+0151, U+0152-&U+0153,U+0153, U+0154-&U+0155, U+0155, U+0156-&U+0157, U+0157, U+0158-&U+0159, U+0159,U+015A-&U+015B, U+015B, U+015C-&U+015D, U+015D, U+015E-&U+015F, U+015F, U+0160-&U+0161,U+0161, U+0162-&U+0163, U+0163, U+0164-&U+0165, U+0165, U+0166-&U+0167, U+0167,U+0168-&U+0169, U+0169, U+016A-&U+016B, U+016B, U+016C-&U+016D, U+016D, U+016E-&U+016F,U+016F, U+0170-&U+0171, U+0171, U+0172-&U+0173, U+0173, U+0174-&U+0175, U+0175,U+0176-&U+0177, U+0177, U+0178-&U+00FF, U+00FF, U+0179-&U+017A, U+017A, U+017B-&U+017C,U+017C, U+017D-&U+017E, U+017E, U+0410..U+042F-&U+0430..U+044F, U+0430..U+044F,U+05D0..U+05EA, U+0531..U+0556-&U+0561..U+0586, U+0561..U+0587, U+0621..U+063A, U+01B9,U+01BF, U+0640..U+064A, U+0660..U+0669, U+066E, U+066F, U+0671..U+06D3, U+06F0..U+06FF,U+0904..U+0939, U+0958..U+095F, U+0960..U+0963, U+0966..U+096F, U+097B..U+097F,U+0985..U+09B9, U+09CE, U+09DC..U+09E3, U+09E6..U+09EF, U+0A05..U+0A39, U+0A59..U+0A5E,U+0A66..U+0A6F, U+0A85..U+0AB9, U+0AE0..U+0AE3, U+0AE6..U+0AEF, U+0B05..U+0B39,U+0B5C..U+0B61, U+0B66..U+0B6F, U+0B71, U+0B85..U+0BB9, U+0BE6..U+0BF2, U+0C05..U+0C39,U+0C66..U+0C6F, U+0C85..U+0CB9, U+0CDE..U+0CE3, U+0CE6..U+0CEF, U+0D05..U+0D39, U+0D60,U+0D61, U+0D66..U+0D6F, U+0D85..U+0DC6, U+1900..U+1938, U+1946..U+194F, U+A800..U+A805,U+A807..U+A822, U+0386-&U+03B1, U+03AC-&U+03B1, U+0388-&U+03B5, U+03AD-&U+03B5,U+0389-&U+03B7, U+03AE-&U+03B7, U+038A-&U+03B9, U+0390-&U+03B9, U+03AA-&U+03B9,U+03AF-&U+03B9, U+03CA-&U+03B9, U+038C-&U+03BF, U+03CC-&U+03BF, U+038E-&U+03C5,U+03AB-&U+03C5, U+03B0-&U+03C5, U+03CB-&U+03C5, U+03CD-&U+03C5, U+038F-&U+03C9,U+03CE-&U+03C9, U+03C2-&U+03C3, U+0391..U+03A1-&U+03B1..U+03C1,U+03A3..U+03A9-&U+03C3..U+03C9, U+03B1..U+03C1, U+03C3..U+03C9, U+0E01..U+0E2E,U+0E30..U+0E3A, U+0E40..U+0E45, U+0E47, U+0E50..U+0E59, U+A000..U+A48F, U+4E00..U+9FBF,U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF, U+2F800..U+2FA1F, U+2E80..U+2EFF,U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF, U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF, U+3130..U+318F, U+A000..U+A48F,U+A490..U+A4CF
ngram_len = 1
ngram_chars = U+4E00..U+9FBF, U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF,U+2F800..U+2FA1F, U+2E80..U+2EFF, U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF,U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF,U+3130..U+318F, U+A000..U+A48F, U+A490..U+A4CF
index moreorder : myorder
//增量索引
source = moreorder
path = /usr/local/sphinx2/var/data/moreorder
docinfo = extern
morphology = none
min_word_len = 1
#charset_type = zh_cn.utf-8
html_strip = 1
charset_table = U+FF10..U+FF19-&0..9, 0..9, U+FF41..U+FF5A-&a..z, U+FF21..U+FF3A-&a..z,A..Z-&a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6-&U+00E0..U+00F6,U+00E0..U+00F6, U+00D8..U+00DE-&U+00F8..U+00FE, U+00F8..U+00FE, U+0100-&U+0101, U+0101,U+0102-&U+0103, U+0103, U+0104-&U+0105, U+0105, U+0106-&U+0107, U+0107, U+0108-&U+0109,U+0109, U+010A-&U+010B, U+010B, U+010C-&U+010D, U+010D, U+010E-&U+010F, U+010F,U+0110-&U+0111, U+0111, U+0112-&U+0113, U+0113, U+0114-&U+0115, U+0115, U+0116-&U+0117,U+0117, U+0118-&U+0119, U+0119, U+011A-&U+011B, U+011B, U+011C-&U+011D, U+011D,U+011E-&U+011F, U+011F, U+0130-&U+0131, U+0131, U+0132-&U+0133, U+0133, U+0134-&U+0135,U+0135, U+0136-&U+0137, U+0137, U+0139-&U+013A, U+013A, U+013B-&U+013C, U+013C,U+013D-&U+013E, U+013E, U+013F-&U+0140, U+0140, U+0141-&U+0142, U+0142, U+0143-&U+0144,U+0144, U+0145-&U+0146, U+0146, U+0147-&U+0148, U+0148, U+014A-&U+014B, U+014B,U+014C-&U+014D, U+014D, U+014E-&U+014F, U+014F, U+0150-&U+0151, U+0151, U+0152-&U+0153,U+0153, U+0154-&U+0155, U+0155, U+0156-&U+0157, U+0157, U+0158-&U+0159, U+0159,U+015A-&U+015B, U+015B, U+015C-&U+015D, U+015D, U+015E-&U+015F, U+015F, U+0160-&U+0161,U+0161, U+0162-&U+0163, U+0163, U+0164-&U+0165, U+0165, U+0166-&U+0167, U+0167,U+0168-&U+0169, U+0169, U+016A-&U+016B, U+016B, U+016C-&U+016D, U+016D, U+016E-&U+016F,U+016F, U+0170-&U+0171, U+0171, U+0172-&U+0173, U+0173, U+0174-&U+0175, U+0175,U+0176-&U+0177, U+0177, U+0178-&U+00FF, U+00FF, U+0179-&U+017A, U+017A, U+017B-&U+017C,U+017C, U+017D-&U+017E, U+017E, U+0410..U+042F-&U+0430..U+044F, U+0430..U+044F,U+05D0..U+05EA, U+0531..U+0556-&U+0561..U+0586, U+0561..U+0587, U+0621..U+063A, U+01B9,U+01BF, U+0640..U+064A, U+0660..U+0669, U+066E, U+066F, U+0671..U+06D3, U+06F0..U+06FF,U+0904..U+0939, U+0958..U+095F, U+0960..U+0963, U+0966..U+096F, U+097B..U+097F,U+0985..U+09B9, U+09CE, U+09DC..U+09E3, U+09E6..U+09EF, U+0A05..U+0A39, U+0A59..U+0A5E,U+0A66..U+0A6F, U+0A85..U+0AB9, U+0AE0..U+0AE3, U+0AE6..U+0AEF, U+0B05..U+0B39,U+0B5C..U+0B61, U+0B66..U+0B6F, U+0B71, U+0B85..U+0BB9, U+0BE6..U+0BF2, U+0C05..U+0C39,U+0C66..U+0C6F, U+0C85..U+0CB9, U+0CDE..U+0CE3, U+0CE6..U+0CEF, U+0D05..U+0D39, U+0D60,U+0D61, U+0D66..U+0D6F, U+0D85..U+0DC6, U+1900..U+1938, U+1946..U+194F, U+A800..U+A805,U+A807..U+A822, U+0386-&U+03B1, U+03AC-&U+03B1, U+0388-&U+03B5, U+03AD-&U+03B5,U+0389-&U+03B7, U+03AE-&U+03B7, U+038A-&U+03B9, U+0390-&U+03B9, U+03AA-&U+03B9,U+03AF-&U+03B9, U+03CA-&U+03B9, U+038C-&U+03BF, U+03CC-&U+03BF, U+038E-&U+03C5,U+03AB-&U+03C5, U+03B0-&U+03C5, U+03CB-&U+03C5, U+03CD-&U+03C5, U+038F-&U+03C9,U+03CE-&U+03C9, U+03C2-&U+03C3, U+0391..U+03A1-&U+03B1..U+03C1,U+03A3..U+03A9-&U+03C3..U+03C9, U+03B1..U+03C1, U+03C3..U+03C9, U+0E01..U+0E2E,U+0E30..U+0E3A, U+0E40..U+0E45, U+0E47, U+0E50..U+0E59, U+A000..U+A48F, U+4E00..U+9FBF,U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF, U+2F800..U+2FA1F, U+2E80..U+2EFF,U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF, U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF, U+3130..U+318F, U+A000..U+A48F,U+A490..U+A4CF
ngram_len = 1
ngram_chars = U+4E00..U+9FBF, U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF,U+2F800..U+2FA1F, U+2E80..U+2EFF, U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF,U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF,U+3130..U+318F, U+A000..U+A48F, U+A490..U+A4CF
三,插入数据,并且更新增量索引1,插入数据
mysql& INSERT INTO users (username)VALUES('张三疯'),('张四疯');
mysql& INSERT INTO orders(user_id, product_name, summary) VALUES ('', '我了个XX', '苛夺asdfasdfasdf'),
('', 'iasdfasdf', '好苛夺花样百出顶戴要');
2,更新增量索引
/usr/local/sphinx2/bin/indexer --config /usr/local/sphinx2/etc/sphinx.conf --rotate moreorder
更新了增量索引后,新增的二条数据在增量索引中,而不在主索引中。
sphinx_rotate更新增量索引
sphinx_rotate更新增量索引
mysql& select * from moreorder where match('张');
//在增量索引中
+------+------------+-----------+-------------+--------------+
| username
| create_time | product_name |
+------+------------+-----------+-------------+--------------+
| 张三疯 |
0 | 我了个XX
| 张四疯 |
0 | iasdfasdf
+------+------------+-----------+-------------+--------------+
2 rows in set (0.00 sec)
mysql& select * from myorder where match('张');
//主索引没有
+------+------------+------------+-------------+----------------+
| username
| create_time | product_name
+------+------------+------------+-------------+----------------+
| tank is 坦克 |
| tank张二 |
| tank is 坦克 |
| tank张一 |
| tank is 坦克 |
| tank is 坦克 |
+------+------------+------------+-------------+----------------+
4 rows in set (0.00 sec)
解决这个问题,有二个办法,一个利用分布式索引,一个把增量索引和主索引进行合并四,sphinx分布式索引配置1,修改sphinx.conf ,加上以下内容
index mytest
= distributed
= moreorder
= 192.168.10.103:9313:myuser
agent_connect_timeout
agent_query_timeout
重新启动sphinx
2,插入新的数据,并更新增量索引,根上面一样,就不多说了。
3,测试sphinx 增量
mysql& select * from myorder where match('张');
//新增数据没有
+------+------------+------------+-------------+----------------+
| username
| create_time | product_name
+------+------------+------------+-------------+----------------+
| tank is 坦克 |
| tank张二 |
| tank is 坦克 |
| tank张一 |
| tank is 坦克 |
| tank is 坦克 |
0 | 我了个XX
0 | iasdfasdf
+------+------------+------------+-------------+----------------+
6 rows in set (0.00 sec)
mysql& select * from moreorder where match('张');
//新增数据在增量索引里面
+------+------------+-----------+-------------+--------------+
| username
| create_time | product_name |
+------+------------+-----------+-------------+--------------+
| 张五疯 |
0 | 我了个XX
| 张六疯 |
0 | iasdfasdf
+------+------------+-----------+-------------+--------------+
2 rows in set (0.00 sec)
mysql& select * from mytest where match('张');
//在这里可以把mytest当成是连接池
+------+------------+------------+-------------+----------------+
| username
| create_time | product_name
+------+------------+------------+-------------+----------------+
0 | 我了个XX
0 | iasdfasdf
| tank is 坦克 |
| tank张二 |
| tank is 坦克 |
| tank张一 |
| tank is 坦克 |
| tank is 坦克 |
0 | 我了个XX
0 | iasdfasdf
+------+------------+------------+-------------+----------------+
8 rows in set (0.00 sec)
五,合并增量索引和主索引1,插入新的数据,并更新增量索引,根上面一样,就不多说了。
2,合并增量索引和主索引
# /usr/local/sphinx2/bin/indexer --config /usr/local/sphinx2/etc/sphinx.conf --merge myorder moreorder --rotate
3,测试sphinx
mysql& select * from myorder where match('张');
//这时在看主索引时,就有新增的二条数据了
+------+------------+------------+-------------+----------------+
| username
| create_time | product_name
+------+------------+------------+-------------+----------------+
| tank is 坦克 |
| tank张二 |
| tank is 坦克 |
| tank张一 |
| tank is 坦克 |
| tank is 坦克 |
0 | 我了个XX
0 | iasdfasdf
+------+------------+------------+-------------+----------------+
6 rows in set (0.00 sec)

我要回帖

更多关于 存量和增量的区别 的文章

 

随机推荐