博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
phpcms v9 配置sphinx全文索引教程
阅读量:4355 次
发布时间:2019-06-07

本文共 4436 字,大约阅读时间需要 14 分钟。

英文介绍:

一、首先需要在服务器上安装sphinx

在Windows上安装sphinx
    1.下载支持mysql的包  
    2.解压缩 sphinx-0.9.9-win32.zip 到 D:\sphinx
    3.安装sphinx服务,在命令行执行命令

 

D:\sphinx\searchd --install --config d:\sphinx\sphinx.conf --servicename SphinxSearch

    英文参照: ... #installing-windows
在Linux服务器上安装sphinx
   1.下载源码包 

 

$ tar xzvf sphinx-0.9.8.tar.gz

$ cd sphinx
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
$ make
$ make install

 常见问题1

 

                /usr/local/sphinx-0.9.9/src/sphinx.cpp:20060: undefined reference to `libiconv_open'
                /usr/local/sphinx-0.9.9/src/sphinx.cpp:20078: undefined reference to `libiconv'
                /usr/local/sphinx-0.9.9/src/sphinx.cpp:20084: undefined reference to `libiconv_close'
                collect2: ld returned 1 exit status
                make[2]: *** [indexer] Error 1
                make[2]: Leaving directory `/home/jling/sphinx-0.9.9/src'
                make[1]: *** [all] Error 2
                make[1]: Leaving directory `/home/jling/sphinx-0.9.9/src'
                make: *** [all-recursive] Error 1

解决办法:打开configure文件,找到“#define USE_LIBICONV 1”,将注释去掉,并将1改成0。

常见问题2

 

                error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory

解决办法:

 

                64位系统ln -/usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so.16
                32位系统ln -/usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.16

 

sphinx.conf样例  

 

source main

                {
                 type     = mysql    #数据库类型
                 sql_host    = 10.228.134.211 #数据库ip
                 sql_user    = admin    #数据库用户名
                 sql_pass    = admin    #数据库密码
                 sql_db     = phpcms_v9   #数据库名
                 sql_port    = 3306    # 数据库端口

  sql_query_pre = SET NAMES utf8

                 sql_query_pre = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
                 sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
                    WHERE searchid>=$start AND searchid<=$end
                 sql_query_range  = SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1
                 sql_range_step = 5000

  #字符串属性设置、需要过滤、排序的时候用到

                 sql_attr_uint  = typeid
                 sql_attr_uint  = siteid
                 sql_attr_uint  = id
                 sql_attr_timestamp  = adddate
                 sql_query_info  = SELECT * FROM v9_search WHERE searchid=$id
                }

 source delta

                {
                 type     = mysql    #数据库类型
                 sql_host    = 10.228.134.211 #数据库ip
                 sql_user    = admin    #数据库用户名
                 sql_pass    = admin    #数据库密码
                 sql_db     = phpcms_v9   #数据库名
                 sql_port    = 3306    # 数据库端口

     sql_query_pre = SET NAMES utf8

                    sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
                  WHERE searchid >( SELECT max_doc_id FROM v9_sphinx_counter WHERE counter_id=1 )
                 sql_query_post = REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
                 #字符串属性设置、需要过滤、排序的时候用到
                 sql_attr_uint  = typeid
                 sql_attr_uint  = siteid
                 sql_attr_uint  = id
                 sql_attr_timestamp  = adddate
                 sql_query_info  = SELECT * FROM v9_search WHERE searchid=$id
                }

 #主索引

                index main
                {
                 source = main
                 # 放索引的目录
                 path = D:\sphinx\data\main
                 # 编码
                 charset_type = utf-8
                 # 指定utf-8的编码表
                 charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
                 # 简单分词,只支持0和1,如果要搜索中文,请指定为1
                 ngram_len = 1
                 # 需要分词的字符,如果要搜索中文,去掉前面的注释
                 ngram_chars   = U+3000..U+2FA1F
                }

 #增量索引

                index delta
                {
                    source = delta
                    path = D:\sphinx\data\delta
                 # 编码
                 charset_type = utf-8
                 # 指定utf-8的编码表
                 charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
                 # 简单分词,只支持0和1,如果要搜索中文,请指定为1
                 ngram_len = 1
                 # 需要分词的字符,如果要搜索中文,去掉前面的注释
                 ngram_chars   = U+3000..U+2FA1F
                }
                 

 indexer

                {
                 mem_limit    = 128M
                }

 searchd

                {
                 port     = 9312
                 log      = D:\sphinx\data\phpcms\searchd.log
                 query_log    = D:\sphinx\data\phpcms\query.log
                 read_timeout   = 5
                 max_children   = 30
                 pid_file    = D:\sphinx\data\phpcms\searchd.pid
                 max_matches    = 2000
                 seamless_rotate   = 0
                 preopen_indexes   = 0
                 unlink_old    = 1
                }

 

附件:设置计划任务更新索引

1.windows下
需要设置计划任务
#凌晨4点合并索引,执行merge.bat
#其余时间每分钟更新索引,执行delta.bat
 
merge.bat  

       

                @ECHO off
                D:\sphinx\bin\indexer.exe --config D:\sphinx\sphinx.conf --merge main delta --rotate
                echo indexing, window will close when complete
                 

 

delta.bat

 

                @ECHO off
                D:\sphinx\bin\indexer.exe --config D:\sphinx\sphinx.conf delta --rotate
                echo indexing, window will close when complete

2.linux下编辑定时任务 crontab -e

 

                #凌晨4点合并索引,其余时间每分钟更新索引
                * 0-3 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate
                * 6-23 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate
                0 4 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --merge main delta --rotate

各种路径、权限需要应用所在服务器一致,如:
sphinx.conf 中需要配置
sql_host 数据库主机地址
sql_user 数据库用户名
sql_pass 数据库密码
sql_db 数据库名
sql_port 数据库端口
phpcms表前缀样例中为phpcms_
索引路径 D:\sphinx\data\delta

转载于:https://www.cnblogs.com/wuheng1991/p/5354839.html

你可能感兴趣的文章
POJ2560-雀斑(Freckles)【图论,并查集,最小生成树,KURUSKAL】
查看>>
[Angular] Tree shakable provider
查看>>
[Vue + TS] Use Dependency Injection in Vue Using @Inject and @Provide Decorators with TypeScript
查看>>
[Angular 2] Select From Multiple Nested Angular 2 Elements
查看>>
C# 中的委托和事件[转帖]
查看>>
图的遍历(bfs+dfs)模板
查看>>
angular service 进行组件通信
查看>>
linux安装Mac的默认Monaco字体
查看>>
java语言的特点
查看>>
关于动态添加iview admin路由以及刷新侧边栏
查看>>
ApplicationInsights的探测器尝鲜
查看>>
java 解析Json格式数据
查看>>
unix中的线程池技术详解
查看>>
CSS简介
查看>>
常用三大软件评价1
查看>>
MVC各层介绍使用---初步理解
查看>>
单例对象的创建与销毁
查看>>
知识点关键词(记录一下)
查看>>
国际结算业务
查看>>
嵌套循环概念
查看>>