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

相关文章

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全?如何个性化邮件推送内容? Steam作为全球最大的数字游戏分发平台之一,不仅提供了海量的游戏资源,还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主要内容。 Steam邮件推送:促销优惠 每当平台举办大型促销活动,如夏季促销、冬季促销、黑色星期五等,用户都会收到邮件通知。这些邮件详细列出了打折游戏、

X-AnyLabeling使用教程

1.AI 模型自动分割标注使用教程 2.AI 模型自动目标检测标注使用教程

青龙面板2.9之Cdle傻妞机器人编译教程

看到有的朋友对傻妞机器人感兴趣,这里写一下傻妞机器人的编译教程。 第一步,这里以linux amd64为例,去官网下载安装go语言安装包: 第二步,输入下方指令 cd /usr/local && wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz -O go1.16.7.linux-amd64.tar.gz

青龙面板部署通用教程,含服务器、路由器、X86等部署方法

1. 拉取镜像/更新镜像 docker pull whyour/qinglong:latest 2. 删除镜像 docker rmi whyour/qinglong:latest 3. 启动容器 普通服务器 docker run -dit \-v $PWD/ql/config:/ql/config \-v $PWD/ql/log:/ql/log \-v $PWD/ql/db:

宝塔面板部署青龙面板教程【简单易上手】

首先,你得有一台部署了宝塔面板的服务器(自己用本地电脑也可以)。 宝塔面板部署自行百度一下,很简单,这里就不走流程了,官网版本就可以,无需开心版。 首先,打开宝塔面板的软件商店,找到下图这个软件(Docker管理器)安装,青龙面板还是安装在docker里,这里依赖宝塔面板安装和管理docker。 安装完成后,进入SSH终端管理,输入代码安装青龙面板。ssh可以直接宝塔里操作,也可以安装ssh连接

PS系统教程25

介绍软件 BR(bridge) PS 配套软件,方便素材整理、管理素材 作用:起到桥梁作用 注意:PS和BR尽量保持版本一致 下载和安装可通过CSDN社区搜索,有免费安装指导。 安装之后,我们打开照片只需双击照片,就自动在Ps软件中打开。 前提:电脑上有PS软件 三种预览格式 全屏预览 评星级 直接按数字键就可以 方向键可以更换图片 esc退出 幻灯片放

flex布局学习笔记(flex布局教程)

前端笔试⾯试经常会问到:不定宽⾼如何⽔平垂直居中。最简单的实现⽅法就是flex布局,⽗元素加上如下代码即 可: display: flex; justify-content: center; align-items :center; 。下⾯详细介绍下flex布局吧。   2009年,W3C提出了 Flex布局,可以简便⼂完整⼂响应式地实现各种页⾯布局。⽬前已得到了所有浏览器的⽀持,这意味着,现

IPython小白教程:提升你的Python交互式编程技巧,通俗易懂!

IPython是一个增强的Python交互式shell,它提供了丰富的功能和便捷的交互方式,使得Python开发和数据分析工作更加高效。本文将详细介绍IPython的基本概念、使用方法、主要作用以及注意事项。 一、IPython简介 1. IPython的起源 IPython由Fernando Pérez于2001年创建,旨在提供一个更高效的Python交互式编程环境。 2. IPyt

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite