当前位置:Gxlcms > mysql > 【原创】sphinx实时索引的配置及实际应用、实例

【原创】sphinx实时索引的配置及实际应用、实例

时间:2021-07-01 10:21:17 帮助过:26人阅读

用coreseek快速搭建sphinx中文分词搜索引擎 的文章链接为: http://blog.zhuyin.org/789.html 本文假设您已经建立好coreseek的普通索引应用了 下面基于这个基础,谈谈如何实现实时索引! #建立实时索引的配置文件 vi /usr/local/coreseek/etc/sphinx_index_r

用coreseek快速搭建sphinx中文分词搜索引擎 的文章链接为:
http://blog.zhuyin.org/789.html
本文假设您已经建立好coreseek的普通索引应用了
下面基于这个基础,谈谈如何实现实时索引!
#建立实时索引的配置文件
vi /usr/local/coreseek/etc/sphinx_index_rt.conf

  1. index rtindex
  2. {
  3. type = rt
  4. path = /dev/shm/rtindex
  5. docinfo = extern
  6. mlock = 0
  7. morphology = none
  8. min_word_len = 1
  9. html_strip = 0
  10. charset_dictpath = /usr/local/mmseg3/etc/
  11. charset_type = zh_cn.utf-8
  12. rt_field = title
  13. rt_field = content
  14. rt_attr_uint = groupid
  15. rt_attr_bigint = biguid
  16. rt_attr_float = score
  17. rt_attr_timestamp = date_added
  18. rt_attr_string = author
  19. rt_attr_string = title
  20. rt_attr_string = content
  21. rt_mem_limit = 512M
  22. }
  23. searchd
  24. {
  25. workers = threads
  26. listen = 9312
  27. listen = 127.0.0.1:9306:mysql41
  28. read_timeout = 5
  29. max_children = 30
  30. max_matches = 1000
  31. seamless_rotate = 0
  32. preopen_indexes = 0
  33. unlink_old = 1
  34. pid_file = /usr/local/coreseek/var/log/searchd_rtindex.pid
  35. log = /usr/local/coreseek/var/log/searchd_rtindex.log
  36. query_log = /usr/local/coreseek/var/log/query_rtindex.log
  37. binlog_path = /usr/local/coreseek/var/log/rtindex/
  38. binlog_flush = 2
  39. binlog_max_log_size = 16M
  40. }

上面的属性就不一一说了,只要留意
rt_field
rt_attr_uint
rt_attr_bigint
rt_attr_string
……
之类的就好,因为这些属性关系到您要索引的字段以及得到的结果是否包含这些字段的内容!
当然
rt_mem_limit
binlog_max_log_size
pid_file
之类的,请根据自己的实际环境设置好。
配置好上面的配置后

#实时索引不需要indexer!!,也就是不需要下面两句的命令了
#/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx_index_rt.conf –all
#/usr/local/coreseek/bin/search -c etc/csft.conf -a Twittter

  1. #直接开启searchd
  2. /usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx_index_rt.conf
  3. #创建管理命令
  4. echo '/usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx_index_rt.conf' > /root/sphinx_start
  5. echo 'killall searchd' > /root/sphinx_stop
  6. echo 'killall searchd
  7. sleep 4
  8. /usr/local/coreseek/bin/searchd --config /usr/local/coreseek/etc/sphinx_index_rt.conf' > /root/sphinx_restart
  9. chmod 755 /root/sphinx*

这个时候您
ps awx|grep searchd
应该有以下的进程在跑了:

114 【原创】sphinx实时索引的配置及实际应用、实例

到这里表明实时索引服务已经启动,下面就是自己写程序往数据源添加内容了。
在此要特别说明一下:
sphinx的实时索引配置本身并不需要数据源(source),它的数据是要通过程序利用
localhost:9306:mysql41协议的方式,往里面加。
下面就写一段实际应用的php代码吧:
比如我有一个文章表 news 需要做实时索引
那在插入、删除、修改 news表的内容的同时,您得写一段类似下面的代码来对实时索引的内容进行更改:

  1. //插入到news表的操作完成后
  2. //连接到实时索引,使用MySQL41协议
  3. $link = mysql_connect('127.0.0.1:9306') or die('connect bad');
  4. if (!$link) {
  5. echo mysql_errno() . ": " . mysql_error(). "\n";
  6. exit;
  7. }
  8. //$id应该是前面插入news表的时候返回的news_id。
  9. $sql="INSERT INTO rtindex(id,title,content,groupid,biguid,score,date_added,author) VALUES ( $id, '$title', '$content', $groupid,$biguid,$score,$date_added,'$author')";
  10. mysql_query($sql);
  11. if(mysql_errno())
  12. {
  13. echo mysql_errno() . ": " . mysql_error(). "\n";
  14. echo $sql;
  15. exit;
  16. }

在做实时索引查询的时候,php代码如下

  1. //连接到实时索引,使用MySQL41协议
  2. $link = mysql_connect('127.0.0.1:9306') or die('connect bad');
  3. if (!$link) {
  4. echo mysql_errno() . ": " . mysql_error(). "\n";
  5. exit;
  6. }
  7. $query=mysql_query("SELECT * FROM rtindex WHERE MATCH('你好吗??')");
  8. if(mysql_errno())
  9. {
  10. echo mysql_errno() . ": " . mysql_error(). "\n";
  11. exit;
  12. }
  13. while($row=mysql_fetch_array($query,MYSQL_ASSOC))
  14. {
  15. print_r($row);
  16. }
  17. die;

当然,上面的php代码都没经过优化,只是很粗糙地完成了这个过程,实际的代码可能会封装成类/方法等等。

关于实时索引的建立及应用,到此结束。
如果大家有不同的建议,欢迎留言,大家一起交流!

人气教程排行