sphinx全文索引教程

2024-01-09 20:32
文章标签 教程 sphinx 全文索引

本文主要是介绍sphinx全文索引教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

英文介绍:http://www.sphinxsearch.com/docs/manual-0.9.9.html

一、首先需要在服务器上安装sphinx
在Windows上安装sphinx
    1.下载支持mysql的包  http://www.sphinxsearch.com/downloads/sphinx-0.9.9-win32.zip
    2.解压缩 sphinx-0.9.9-win32.zip 到 D:\sphinx
    3.安装sphinx服务,在命令行执行命令

 

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


    英文参照:http://www.sphinxsearch.com/docs ... #installing-windows

在Linux服务器上安装sphinx
   1.下载源码包 http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz

 

$ 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 -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so.16
                
32位系统ln -s /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

phpcmsv9_withsphinx.zip


文章来源:  http://v9.help.phpcms.cn/html/2010/search_0919/35.html

这篇关于sphinx全文索引教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588340

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

MySql9.1.0安装详细教程(最新推荐)

《MySql9.1.0安装详细教程(最新推荐)》MySQL是一个流行的关系型数据库管理系统,支持多线程和多种数据库连接途径,能够处理上千万条记录的大型数据库,本文介绍MySql9.1.0安装详细教程,... 目录mysql介绍:一、下载 Mysql 安装文件二、Mysql 安装教程三、环境配置1.右击此电脑

在idea中使用mysql数据库超详细教程

《在idea中使用mysql数据库超详细教程》:本文主要介绍如何在IntelliJIDEA中连接MySQL数据库,并使用控制台执行SQL语句,还详细讲解了如何使用MyBatisGenerator快... 目录一、连接mysql二、使用mysql三、快速生成实体、接口、sql文件总结一、连接mysql在ID