sphinx 配置文件中文翻译
Sphinx-coreseek中文分词检索说明文档
查阅地址/sphinx-tutorial一.#MySQL数据源配置,详情请查看:/products-install/mysql/#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库#源定义source mysql{type = mysqlsql_host = localhostsql_user = rootsql_pass =sql_db = testsql_port = 3306sql_query_pre = SET NAMES utf8#sql_query第一列goods_id需为整数可以写lift joinsql_query = SELECT goods_id, goods_name FROM td_goods#筛选可多个条件sql_attr_multi = uint cate_id from query; SELECT goods_id,cat_id FROM td_category_goodssql_attr_uint = cate_id #从SQL读取到的值必须为整数}#index定义index taidu{source = baidu #对应的source名称path = var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...docinfo = externmlock = 0morphology = nonemin_word_len = 1html_strip = 0#中文分词配置,详情请查看:/products-install/coreseek_mmseg/ #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾charset_dictpath = etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...charset_type = zh_cn.utf-8}#全局index定义indexer{mem_limit = 128M}#searchd服务定义searchd{listen = 9312 #开启端口read_timeout = 5max_children = 30max_matches = 1000seamless_rotate = 0preopen_indexes = 0unlink_old = 1pid_file = var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...log = var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...query_log = var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...binlog_path = #关闭binlog日志}二.Php调用ecmall sphinx 已集成进去了产品筛选$_cs = &sphinx_server();$_cs->SetServer('localhost',9312); //设置服务器和端口$_cs->setMatchMode(SPH_MATCH_ANY);//设置匹配模式$_cs->setMaxQueryTime(3);//设置最大查询时间//$result = $_sphinx_server->query('test');//test为关键字//$_cs->SetFilter('cate_id', array(95,35,36));//$result = $_cs->query('搜索','*');//查询cate_id 为95,35,36下的$_cs->SetFilter('cate_id', array(95,35,36));$r = $_cs->query('','*');rdump($r);全文检索数据源sql_query = SELECT goods_id,cate_id,UNIX_TIMESTAMP(date_added) AS date_added, goods_name, description FROM td_goods #sql_query第一列id需为整数#goods_name、description作为字符串/文本字段,被全文索引sql_attr_uint = cate_id #从SQL读取到的值必须为整数sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性sql_query_info_pre = SET NAMES utf8直接调用query 就可以返回数据$result = $_cs->query('搜索','*');。
Sphinx+Python+Oracle构建全文检索系统
Sphinx+Python+Oracle构建全文检索系统摘要目前,很多大型企业的CRM系统在构建时都是采用Oracle作为数据库,本文正是为这类系统提供一个可以作为参考实现的基于Sphinx的站内全文检索系统的实现方法。
关键词全文检索;Sphinx;站内检索1 Sphinx简介Sphinx是一个在GPLv2下分发的全文检索软件包,是SQL Phrase Index的缩写。
它最初开发的目的是为了在数据库驱动的网站中寻找解决索引质量、搜索性能等各方面的问题而开发的一个高性能独立的全文搜索软件包,所以它可以非常容易的与SQL数据库集成,为数据库驱动的网站提供高质量、高性能的站内搜索。
当前,Sphinx系统内置了MySQL和PostgreSQL数据库数据源的支持,也支持从管道标准输入读取特定格式的XML数据。
但是,目前Sphinx还不支持直接将Oeacle数据库作为数据源,但在最新的版本中,添加了Python数据源支持,这极大的扩展了数据源的来源,我们可以操作Python脚本作为数据源来获取Oracle中的数据。
2 Python数据源操作Oracle数据库的设计与实现考虑到安全、性能等因素,目前,很多大型的网站,尤其是大型企业的CRM 系统,在数据库构建方面都采用了Oracle数据库。
基于此,我的研究正是基于Oracle构建的大型企业CRM系统,借助Sphinx软件包提供全文搜索功能,同时结合MMSeg中文分词软件包来为网站生成一个功能强大的站内搜索引擎。
2.1系统目标本系统要实现一个基于Oracle数据库构建的企业CRM系统的高效的全文检索系统,并保证查询性能和查询结果的准确性,具体应满足以下两方面要求:1)在数据量较大时具有较高的查询性能,在海量数据检索时仍能保持较快的响应速度和准确率;2)以CRM系统在Oracle数据库中所存储的数据为检索目标,系统提供易于操作和使用的查询接口,用户可以通过该系统检索CRM系统上所有的网页内容。
sphinx中文分词高亮显示
安装步骤1.在安装 coreseek以前保证在系统安装了LNMP/LAMP环境。
2.安装依靠软件yuminstallgccmakegcc-c++libtoolautoconfautomakeimakemysql-devellibxml2-develexpat-devel3.将下载好的安装包上传到opt 目录,履行解压命令,解压达成后进入目录4.将会看到 3 个目录分别是、、testpack,此中 csft 实质就是 sphinx 安装包,mmseg 为中文分词安装包, testpack 是安装完coreseek后测试用的。
第一安装中文分词mmseg./bootstrap./configure--prefix=/usr/local/mmseg/5.履行编译并安装mmsegmake && make install接下来安装 coreseek1.进入 coresek 文件夹,运转命令cd ../csft-3.2.14 或许 4.12.运转命令sh buildconf.sh1 / 21 / 23.配置./configure--prefix=/usr/local/coreseek--without-unixodbc --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/--with-mysql 4.编译安装 --with-mmsegmake && make install6.改正配置文件安装完成后注意coreseek中的配置文件也是csft.conf 而不是 sphinx.conf 运转命令,创立csft.conf 文件cd /usr/local/coreseek/etccp sphinx.conf.dist csft.confvim csft.conf配置文件内设置字符编码,mysql 配置信息等。
sphinx中文指南
目录(?)[+]
1、简介 1.1.Sphinx 是什么 1.2.Sphinx 的特性 1.3.Sphinx 中文分词 2、安装配置实例 2.1 在 GNU/Linux/unix 系统上安装 o o o 2.1.1 sphinx 安装 2.1.2.sfc 安装(见另文) 2.1.3.coreseek 安装(见另文)
此外,如果你对中文分词不感兴趣。或者说仅需要实现类似 sql 中 like 的功能,如:
select * from product where prodName like '%手机%'。sphinx 也不会让你失望,这个 或许就是官网对中文的简单实现——直接对字索引。并且搜索速度还不错^_^ 。 本文会对以上三种中文应用进行测试, 并以文档的方式记录下来, 这也许正是本文档的重点。
| member_id | int(11) unsigned | NO | MUL | | | | content | longtext | NO | | | | | created | int(11) | NO | MUL | | | +-----------+---------------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec)
2.安装配置实例
2.1在 GNU/Linux/unix 系统上安装
Sphinx 在 mysql 上的应用有两种方式: ①、采用 API 调用,如使用 PHP、java 等的 API 函数或方法查询。优点是可不必对 mysql 重新编译,服务端进程“低耦合”,且程序可灵活、方便的调用; 缺点是如已有搜索程序的条件下,需修改部分程序。推荐程序员使用。 ②、使用插件方式(sphinxSE)把 sphinx 编译成一个 mysql 插件并使用特定的 sql 语句进 行检索。其特点是,在 sql 端方便组合,且能直接返回数据给客户端 不必二次查询(注),在程序上仅需要修改对应的 sql,但这对使用框架开发的程序很 不方便,比如使用了 ORM。另外还需要对 mysql 进行重新编译,且需要 mysql-5.1以上版 本 支持插件存储。系统管理员可使用这种方式 二次查询注:到现在发布版本为止——sphinx-0.9.9,sphinx 在检索到结果后只能返回记录 的 ID,而非要查的 sql 数据,故需要重新根据这些 ID 再次从数据库中查询, 正在开发的 sphinx 0.9.10版本已可存储这些文本数据,作者曾试过,性能和存储上的效果 都不佳,毕竟还没出正式版 本文采用的是第一种方式 在*nix 系统下安装,首先需要以下一些软件支持 软件环境: 操作系统:Centos-5.2 数据库:mysql-5.0.77-3.el5 mysql-devel(如果要使用 sphinxSE 插件存储请使用
Sphinx Windows 安装配置极简版
Sphinx Windows 版安装配置极简版以下内容以Sphinx 2.0.5,PHP 为例。
需要提前说明一下,官方版本对中文支持不好。
1,下载安装包,并解压到某个目录,比如解压到D:/sphinx/2,该文件夹下一共有如下几个比较重要的文件。
a)D:/sphinx/sphnix.conf.in 配置文件参考b)D:/sphinx/bin/indexer.exe 索引生成命令c)D:/sphinx/bin/searchd.exe 服务(包括search.exe)d)D:/sphinx/api/sphinxapi.php PHP接口3,在D:/sphinx/ 下建立data 和log 文件夹。
4,将D:/sphinx/ 建立文件sphinx.conf,内容可参考附录1,或者sphinx.conf.in。
5,然后更新索引,运行服务。
具体可以以管理员身份执行命令(CMD)D:cd "D:/sphinx/bin"indexer.exe --config "D:/sphinx/sphinx.conf" --allsearchd.exe --config "D:/sphinx/sphinx.conf"如果没有报错,应该就没什么问题了。
6,如无其它意外,此时应该已经安装配置成功。
可以管理员身份执行命令search.exe testwords –config “D:/sphinx/sphinx.conf”其中testwords 是要查询的词语。
7,下面来使用API 来搜索字词。
可参考api 文件夹下的test2.php,此文件可通过WEB 方式访问。
或者参考附录2。
补充:如需更新配置文件,需先停掉服务,等配置文件更新完成后,再重新开启服务。
附录1 sphinx.confsource src_test{type = mysqlsql_host = localhostsql_user = rootsql_pass = 123456sql_db = testdatasql_port = 3306 # optional, default is 3306sql_query_pre = SET NAMES utf8sql_query = \SELECT id, 1 as idd, province, location_full \FROM ip_database}index test{source = src_testpath = D:/sphinx/data/testdocinfo = externcharset_type = utf-8}附录2<?php/*** sphinx 接口** 传入要查询的 base64 加密的 url* ?q=xxx* 返回查到的对应的id** filename: index.php* charset: UTF-8* create date: 2012-8-28** @author Zhao Binyan <itbudaoweng@>* @copyright 2011-2012 Zhao Binyan* @link * @link /itbudaoweng*///引入 sphinx API 文件include "../../../sphinx/api/sphinxapi.php";header('Content-Type:text/html; charset=utf-8'); error_reporting(0);$ret = array();$q = $_GET['q'];//$q = base64_decode($q);if (!is_int($q)) {$q = "\"$q\"";}$index = '*';//sphinx$sphinx = new SphinxClient();$sphinx->SetServer('localhost');$sphinx->SetMatchMode(SPH_MATCH_EXTENDED); $sphinx->SetRankingMode(SPH_RANK_NONE);//搜索词切记使用双引号包裹一下$q = $sphinx->Query($q, $index);if ($q['total'] > 0) {$ret = array_keys($q['matches']);}echo json_encode($ret);更多内容请参考:/docs/2.0.5/赵彬言(IT不倒翁)/itbudaoweng2012年8月29日星期三。
Sphinx使用手册(PHP版)
Sphinx使用手册(PHP版)连邦软件(南通)有限公司网站事业部季飞2011年10月17日目录一、简介 (2)1.环境与支持 (2)2.测试结果 (2)3.调用原理 (2)二、Sphinx应用场景 (3)1.全文检索 (3)2.排序 (3)3.分类 (3)三、Sphinx运用之搜索 (3)1.问吧 (3)2.资讯 (3)3.下载 (3)四、API调用 (4)1.创建连接 (4)2.配置查询 (4)3.输出结果 (6)4.异常处理 (7)一、简介1.环境与支持Sphinx支持MySQL等数据库。
搜索API支持PHP、Java等语言。
高性能的搜索(在2–4GB的文本数据上,平均每次检索响应时间小于0.1秒),提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法。
2.测试结果数据库1200万条记录,最大搜索条数设为1000万,耗时3.x秒,其余两台超时。
2数据库1200万条记录,最大搜索条数设为10万,耗时0.8秒,两台同时访问为0.9秒,用mysql直接搜索为24秒。
3数据库1200万条记录最大条数设为1,000,耗时0.0x秒。
4百度搜索后返回百万条记录实际最多可访问740条,google为880条,我们可以设为500条,查询速率在0.01秒级别。
3.调用原理我们只需要提交要查询,Sphinx将返回唯一的id号。
二、Sphinx应用场景1.全文检索根据查询内容进行分词,检索返回结果,大数量时搜索效率提高近百倍。
2.排序对搜索结果可以进行排序,排序可以按数据库中的字段,也可以是Sphinx内置的属性。
3.分类可以限定字段的数值或者范围,例:限定分类号为多少,此时就实现了分类。
当在问题索引中限定用户id时,将得到某个用户发布的所有问题。
三、Sphinx运用之搜索全文检索限制用户输入最大为20个汉字,返回指定的条数(1000或500条)。
1.问吧用户自己选择检索栏目问题(默认)或者答案,按排序。
sphinx社区全文搜索平台配置手册
千万级Discuz!数据全文检索方案(Sphinx)前言:康盛创想的Discuz!从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计,使得Discuz! 可以在极为繁忙的服务器环境下快速高效稳定运行。
由于Discuz!产品依赖MySQL数据库性能,在全文检索方面如果仅仅依靠MySQL的LIKE %关键词% 语句无法取得理想的成绩。
本文阐述经过Discuz!生产环境考验的构建在Sphinx基础上的千万级Discuz!数据全文检索解决方案。
出自俄罗斯的开源全文搜索引擎软件Sphinx在单一索引达到4千万条记录情况下的查询速度仍为0.x秒甚至0.0x秒级别。
Sphinx创建索引的速度约五分钟处理百万条记录,对于每分钟的增量索引重建只需要几十秒,每日的增量索引合并到主索引也只需一分钟左右。
此构架基础上的Discuz!高负载站点,已成功解决搜索速度慢、经常锁表、无法分布式搜索等问题。
千万级Discuz!数据全文检索方案(Sphinx)适用于繁忙的站点并且论坛访问者有大量的搜索需求,本方案主要解决搜索缓慢问题。
本文环境以CentOS 5为基准。
初始化一次全部索引,按系统计划任务crontab定时方式,每5分钟重建一次增量索引(增量索引不与主索引合并),每日凌晨3:30建立一次昨日比较的增量索引(合并到主索引中)。
主索引建立在磁盘目录/data/sphdata,增量索引建立在内存/dev/shm/中避免大量的I/O操作,由于帖子编辑限制,全部索引每两个月重建一次。
目录千万级Discuz!数据全文检索方案(Sphinx) (1)Sphinx快速介绍 (2)一、Sphinx全文检索方案构架图 (3)二、Sphinx中文分词 (4)三、Sphinx安装步骤 (4)1.安装、升级所需的程序库 (4)2.创建安装文件夹并下载源代码 (4)3.安装MMseg中文分词 (4)4.安装CSFT(Sphinx的CoreSeek修改版) (5)5.编译Sphinx过程可能出现的错误 (5)a)无法找到mysql路径 (5)b)无法找到libiconv (5)c)无法找到libmysqlclient.so.15 (5)d)php 5.2.11版本的api BUG (5)e)生成索引时容易发生磁盘空间不足写入失败的错误 (5)6.安装为php扩展(可选) (6)7.安装SphinxSE存储引擎(可选) (6)四、Sphinx配置 (6)1.mmseg中文分词词库 (6)a)词典格式 (6)b)词库生成方法 (7)2.创建sphinx数据目录结构 (7)3.创建sphinx.conf配置文件 (7)4.mmseg.ini分词配置文件 (14)5.建立Sphinx增量索引数据表 (14)6.书写常用的sphinx控制命令到sh文件 (14)7.创建相应的文件结构,初始化Sphinx的全部索引 (17)8.启动sphinx (17)9.设置计划任务项 (17)10.设置开机启动项 (17)五、通过命令行测试搜索 (17)六、通过php api调用Sphinx搜索 (18)七、通过MySQL的SphinxSE存储引擎调用Sphinx搜索(可选) (19)八、Sphinx数据占用量统计 (19)Sphinx快速介绍Sphinx是独立的搜索服务端,不依赖MySQL,当Sphinx和MySQL结合部署时,Sphinx的数据来源为MySQL。
sphinx技术文档介绍--
Sphinx技术1,Sphinx介绍Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL 也设计了一个存储引擎插件。
Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。
Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
Sphinx的主要特性包括:高速索引 (在新款CPU上,近10 MB/秒);高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);高可用性 (单CPU上最大可支持100 GB的文本,100M文档);提供良好的相关性排名支持分布式搜索;提供文档摘要生成;提供从MySQL内部的插件式存储引擎上搜索支持布尔,短语, 和近义词查询;支持每个文档多个全文检索域(默认最大32个);支持每个文档多属性;支持断词;支持单字节编码与UTF-8编码2,sphinx基本安装以在windows上安装为例,使用sphinx版本为2.2.8_win32版本,mysql server 5.1.1,下载sphinx并解压到C:\sphinx下,并把C:\sphinx\bin\lib\libmysql.dll拷贝到mysql的bin目录下;2, 在C:\sphinx\下新建一个data目录用来存放索引文件,一个log目录方日志文件,复制C:\sphinx\sphinx.conf.in到C:\sphinx\bin\sphinx.conf(注意修改文件名);3, 修改C:\sphinx\bin\sphinx.conf,这里列出需要修改的几个:type = mysql # 数据源,我这里是mysqlsql_host = localhost # 数据库服务器sql_user = root # 数据库用户名sql_pass = 123456 # 数据库密码sql_db = test # 数据库sql_port = 3306 # 数据库端口sql_query_pre = SET NAMES utf8index test1{# 放索引的目录path = C:/sphinx/data/# 编码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,如果要搜索中文,请指定为1ngram_len = 1# 需要分词的字符,如果要搜索中文,去掉前面的注释ngram_chars = U+3000..U+2FA1F}# index test1stemmed : test1# {# path = @CONFDIR@/data/test1stemmed# morphology = stem_en# }# 如果没有分布式索引,注释掉下面的内容# index dist1# {# 'distributed' index type MUST be specified# type = distributed# local index to be searched# there can be many local indexes configured# local = test1# local = test1stemmed# remote agent# multiple remote agents may be specified# syntax is 'hostname:port:index1,[index2[,...]] # agent = localhost:3313:remote1# agent = localhost:3314:remote2,remote3# remote agent connection timeout, milliseconds # optional, default is 1000 ms, ie. 1 sec# agent_connect_timeout = 1000# remote agent query timeout, milliseconds# optional, default is 3000 ms, ie. 3 sec# agent_query_timeout = 3000# }# 搜索服务需要修改的部分searchd{# 日志log = C:/sphinx/log/searchd.log# PID file, searchd process ID file namepid_file = C:/sphinx/log/searchd.pid# windows下启动searchd服务一定要注释掉这个# seamless_rotate = 1}4,导入测试数据使用管理员权限打开命令行窗口,使用mysql -uroot -p123456test<C:/sphinx/example.sql即可。
Sphinx使用手册
Sphinx使用手册在上一篇中,我们完成了Sphinx的安装,在这篇中我们使用php程序操作Sphinx,做个小的站内搜素引擎。
Sphinx集成到程序中,有两种方式:Sphinxapi类、SphinxSE存储引擎。
我们要使用Sphinx需要做以下几件事:1、首先得有数据(安装篇我们已经导入数据了)2、建立Sphinx配置文件(在安装篇我们已经配置完成了)3、生成索引(在安装篇我们也做了)4、启动Sphinx (从这里开始吧)5、使用之(调用api进行查询或使用sphinxSE)一、启用sphinx服务。
想要在程序中使用Sphinx必须开启Sphinx服务。
启动进程命令:searchd-c 指定配置文件--stop 是停止服务--pidfile 用来显式指定一个PID文件。
最好指定,要不然,合并索引时,会报错-p 指定端口/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/sphinx.conf注意:这里启动的服务是searchd ,不是 search。
Sphinx默认的端口是9312端口。
如果出现这个问题:说明端口已经被占用了,可以用netstat -tnl查看下,9312已经运行。
解决的办法是:netstat -apn | grep 9312 找出进程IDkill -9 进程id 再开启就可以了。
二、使用php程序使用sphinx (sphinxapi类)(1)、在php手册中有相应的函数。
需要到coreseek解压包中找到sphinxapi.php文件,放到程序目录下。
cp /lamp/coreseek-3.2.14/csft-3.2.14/api/sphinxapi.php /usr/local/apache2/htdocs/ include 'sphinxapi.php';// 加载Sphinx API$sphinx = new SphinxClient(); //创建sphinx对象$sphinx->SetServer("localhost", 9312); //建立连接,第一个参数sphinx服务器地址,第二个sphinx监听端口$result = $sphinx->query($keyword,"*"); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,多个索引名称用(逗号)分开,也可以用*表示全部索引。
Coreseek 全文检索服务器 2.0 (Sphinx 0.9.8)参考手册
文档Coreseek 全文检索服务器2.0 (Sphinx 0.9.8)参考手册文档版本:v0.9目录1. 简介1.1. 什么是Sphinx1.2. Sphinx 的特性1.3. 如何获得Sphinx1.4. 许可协议1.5. 作者和贡献者1.6. 开发历史2. 安装2.1. 支持的操作系统2.2. 依赖的工具2.3. 安装Sphinx2.4. 已知的问题和解决方法2.5. Sphinx 快速入门教程3. 建立索引3.1. 数据源3.2. 属性3.3. 多值属性( MV A :multi-valued attributes)3.4. 索引3.5. 数据源的限制3.6. 字符集, 大小写转换, 和转换表3.7. SQL 数据源(MySQL, PostgreSQL)3.8. xmlpipe 数据源3.9. xmlpipe2 数据源3.10. 实时索引更新3.11. 索引合并4. 搜索4.1. 匹配模式4.2. 布尔查询4.3. 扩展查询4.4. 权值计算4.5. 排序模式4.6. 结果分组(聚类)4.7. 分布式搜索4.8. searchd 日志格式5. API 参考5.1. 通用API 方法5.1.1. GetLastError5.1.2. GetLastWarning5.1.3. SetServer5.1.4. SetRetries5.1.5. SetArrayResult5.2. 通用搜索设置5.2.1. SetLimits5.2.2. SetMaxQueryTime5.3. 全文搜索设置5.3.1. SetMatchMode5.3.2. SetRankingMode5.3.3. SetSortMode5.3.4. SetWeights5.3.5. SetFieldWeights5.3.6. SetIndexWeights5.4. 结果集过滤设置5.4.1. SetIDRange5.4.2. SetFilter5.4.3. SetFilterRange5.4.4. SetFilterFloatRange5.4.5. SetGeoAnchor5.5. GROUP BY 设置5.5.1. SetGroupBy5.5.2. SetGroupDistinct5.6. 搜索5.6.1. Query5.6.2. AddQuery5.6.3. RunQueries5.6.4. ResetFilters5.6.5. ResetGroupBy5.7. 额外的方法5.7.1. BuildExcerpts5.7.2. UpdateAttributes6. MySQL 存储引擎(SphinxSE)6.1. SphinxSE 概览6.2. 安装SphinxSE6.2.1. 在MySQL 5.0.x 上编译SphinxSE6.2.2. 在MySQL 5.1.x 上编译SphinxSE6.2.3. SphinxSE 安装测试6.3. 使用SphinxSE7. 报告bugs8. sphinx.conf 选项参考8.1. Data source 配置选项8.1.1. type8.1.2. sql_host8.1.3. sql_port8.1.4. sql_user8.1.5. sql_pass8.1.6. sql_db8.1.7. sql_sock8.1.8. mysql_connect_flags8.1.9. sql_query_pre8.1.10. sql_query8.1.11. sql_query_range 8.1.12. sql_range_step8.1.13. sql_attr_uint8.1.14. sql_attr_bool8.1.15. sql_attr_timestamp8.1.16. sql_attr_str2ordinal8.1.17. sql_attr_float8.1.18. sql_attr_multi8.1.19. sql_query_post8.1.20. sql_query_post_index8.1.21. sql_ranged_throttle8.1.22. sql_query_info8.1.23. xmlpipe_command8.1.24. xmlpipe_field8.1.25. xmlpipe_attr_uint8.1.26. xmlpipe_attr_bool8.1.27. xmlpipe_attr_timestamp8.1.28. xmlpipe_attr_str2ordinal8.1.29. xmlpipe_attr_float8.1.30. xmlpipe_attr_multi8.2. 索引配置选项8.2.1. type8.2.2. source8.2.3. path8.2.4. docinfo8.2.5. mlock8.2.6. morphology8.2.7. stopwords8.2.8. wordforms8.2.9. exceptions8.2.10. min_word_len8.2.11. charset_type8.2.12. charset_table8.2.13. ignore_chars8.2.14. min_prefix_len8.2.15. min_infix_len8.2.16. prefix_fields8.2.17. infix_fields8.2.18. enable_star8.2.19. ngram_len8.2.20. ngram_chars8.2.21. phrase_boundary8.2.22. phrase_boundary_step8.2.23. html_strip8.2.24. html_index_attrs8.2.25. html_remove_elements8.2.26. local8.2.27. agent8.2.28. agent_connect_timeout8.2.29. agent_query_timeout8.2.30. preopen8.2.31. charset_dictpath 8.3. indexer 程序配置选项8.3.1. mem_limit8.3.2. max_iops8.3.3. max_iosize8.4. searchd 程序配置选项8.4.1. address8.4.2. port8.4.3. log8.4.4. query_log8.4.5. read_timeout8.4.6. max_children8.4.7. pid_file8.4.8. max_matches8.4.9. seamless_rotate8.4.10. preopen_indexes8.4.11. unlink_old1. 简介1.1. 什么是SphinxSphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需要联系我们()以获得商业授权。
Sphinx_doc_中文手册
Coreseek 全文检索服务器 2.0 (Sphinx 0.9.8)参考手册文档版本:v0.9目录1. 简介1.1. 什么是Sphinx1.2. Sphinx 的特性1.3. 如何获得Sphinx1.4. 许可协议1.5. 作者和贡献者1.6. 开发历史2. 安装2.1. 支持的操作系统2.2. 依赖的工具2.3. 安装Sphinx2.4. 已知的问题和解决方法2.5. Sphinx 快速入门教程3. 建立索引3.1. 数据源3.2. 属性3.3. 多值属性 (MV A: multi-valued attributes)3.4. 索引3.5. 数据源的限制3.6. 字符集 , 大小写转换 , 和转换表3.7. SQL 数据源 (MySQL, PostgreSQL)3.8. xmlpipe 数据源3.9. xmlpipe2 数据源3.10. 实时索引更新3.11. 索引合并4. 搜索4.1. 匹配模式4.2. 布尔查询4.3. 扩展查询4.4. 权值计算4.5. 排序模式4.6. 结果分组(聚类)4.7. 分布式搜索4.8. searchd日志格式5. API 参考5.1. 通用API 方法5.1.1. GetLastError5.1.2. GetLastWarning5.1.3. SetServer5.1.4. SetRetries5.1.5. SetArrayResult5.2. 通用搜索设置5.2.1. SetLimits5.2.2. SetMaxQueryTime5.3. 全文搜索设置5.3.1. SetMatchMode5.3.2. SetRankingMode5.3.3. SetSortMode5.3.4. SetWeights5.3.5. SetFieldWeights5.3.6. SetIndexWeights5.4. 结果集过滤设置5.4.1. SetIDRange5.4.2. SetFilter5.4.3. SetFilterRange5.4.4. SetFilterFloatRange5.4.5. SetGeoAnchor5.5. GROUP BY 设置5.5.1. SetGroupBy5.5.2. SetGroupDistinct5.6. 搜索5.6.1. Query5.6.2. AddQuery5.6.3. RunQueries5.6.4. ResetFilters5.6.5. ResetGroupBy5.7. 额外的方法5.7.1. BuildExcerpts5.7.2. UpdateAttributes6. MySQL 存储引擎 (SphinxSE)6.1. SphinxSE 概览6.2. 安装SphinxSE6.2.1. 在MySQL 5.0.x 上编译SphinxSE6.2.2. 在MySQL 5.1.x 上编译SphinxSE6.2.3. SphinxSE 安装测试6.3. 使用SphinxSE7. 报告bugs8. sphinx.conf选项参考8.1. Data source 配置选项8.1.1. type8.1.2. sql_host8.1.3. sql_port8.1.4. sql_user8.1.5. sql_pass8.1.6. sql_db8.1.7. sql_sock8.1.8. mysql_connect_flags8.1.9. sql_query_pre8.1.10. sql_query8.1.11. sql_query_range8.1.12. sql_range_step8.1.13. sql_attr_uint8.1.14. sql_attr_bool8.1.15. sql_attr_timestamp8.1.16. sql_attr_str2ordinal8.1.17. sql_attr_float8.1.18. sql_attr_multi8.1.19. sql_query_post8.1.20. sql_query_post_index8.1.21. sql_ranged_throttle8.1.22. sql_query_info8.1.23. xmlpipe_command8.1.24. xmlpipe_field8.1.25. xmlpipe_attr_uint8.1.26. xmlpipe_attr_bool8.1.27. xmlpipe_attr_timestamp8.1.28. xmlpipe_attr_str2ordinal8.1.29. xmlpipe_attr_float8.1.30. xmlpipe_attr_multi8.2. 索引配置选项8.2.1. type8.2.2. source8.2.3. path8.2.4. docinfo8.2.5. mlock8.2.6. morphology8.2.7. stopwords8.2.8. wordforms8.2.9. exceptions8.2.10. min_word_len8.2.11. charset_type8.2.12. charset_table8.2.13. ignore_chars8.2.14. min_prefix_len8.2.15. min_infix_len8.2.16. prefix_fields8.2.17. infix_fields8.2.18. enable_star8.2.19. ngram_len8.2.20. ngram_chars8.2.21. phrase_boundary8.2.22. phrase_boundary_step8.2.23. html_strip8.2.24. html_index_attrs8.2.25. html_remove_elements8.2.26. local8.2.27. agent8.2.28. agent_connect_timeout8.2.29. agent_query_timeout8.2.30. preopen8.2.31. charset_dictpath8.3. indexer程序配置选项8.3.1. mem_limit8.3.2. max_iops8.3.3. max_iosize8.4. searchd程序配置选项8.4.1. address8.4.2. port8.4.3. log8.4.4. query_log8.4.5. read_timeout8.4.6. max_children8.4.7. pid_file8.4.8. max_matches8.4.9. seamless_rotate8.4.10. preopen_indexes8.4.11. unlink_old1. 简介1.1. 什么是SphinxSphinx 是一个在GPLv2 下发布的一个全文检索引擎,商业授权(例如, 嵌入到其他程序中)需要联系我们()以获得商业授权。
sphinx配置-中文分词-PHP调用sphinx课件(2)
./configure --prefix=/usr/local/sphinx --withmysql=/usr/local/mysql make && make install
• 我们需要备份一下配置文件,防止改错不好 处理。 cp sphinx.conf.dist sphinx.conf
sql_query_info WHERE id=$id
= SELECT * FROM documents
}
xmlpipe settings 是XML类型的,直接过去。
211行 这个
source srclthrottled:srcl 继承索引源。
index test1 (只有索引这个里面的值要修改)
sql_pass = sphinxpass #MySQL密码
sql_db = sphinx #MySQL数据库
sql_port = 3306
# MySQL端口
sql_sock = /tmp/mysql.sock
sock文件。
35行
# 如果是linux下需要开启,指定
sql_query_pre = SET NAMES UTF8 # MySQL检索编码 73行
Coreseek
• cd /lamp • tar -zxvf coreseek-3.2.14.tar.gz • 进入到mmseg所在文件夹,先安装中文分词mmseg。 • cd /lamp/coreseek-3.2.14/mmseg-3.2.14/ • ./bootstrap //输入的warming信息可以忽略,error需要解
3.sphinx分布图
相当于数据库的中间层,缓解数据库的压力
Sphinx4白皮书中文版
Sphinx4Sphinx4 FRAMEWORK高度的灵活性和模块化每个标记元素在图中代表一个模块,可以很容易地更换,从而让研究人员尝试不同的模块实现,同时不需要修改系统的其他部分3个模块:前端处理模块、解码器、语言专家Sphinx4API的注释和翻译:/taiyb/article/category/2456757一、前端前端包括一个或多个平行的称为数据处理器的通信信号处理模块。
支持多个链同时从相同或不同的输入信号中计算不同类型的参数。
每一个数据处理器相当于是一个特定的信号处理函数。
例如:一个处理器对输入数据执行FFT(快速傅里叶变化)。
另一个处理器执行的是高通滤波对输入数据。
在处理器链中的每一个数据处理器都实现了DataProcessor接口。
实现了Data接口的对象进行前端,从前端出来,在前端的处理器中通过。
输入前端的数据一般是音频数据,但是前端是允许任意类型的输入的。
类似的,输出的数据一般是特征,但是允许输出任意的输出类型。
你能够配置前端接收任意类型的输入,返回任意类型的输出。
前端是一个Pull模型,采用的是pull的设计模式。
为了获得前端的输出,你需调用frontend.getData();。
在前端调用getData()方法会依次调用上(前)一个数据处理器在数据处理器链中的,直到第一个数据处理器的getData()方法被调用,这个处理器是从输入中读取Data对象。
前端的输入实际上是另一个数据处理器,通常是前端的一部分。
二、语言专家在sphinx – 4中,语言专家是一个可插入模块,允许人们用不同的语言专家实现动态配置系统。
它是为解码器(decoder)创建和管理搜索空间的,此类为是一个提供了语言模型服务的一般接口。
任何语言专家的主要作用是为解码器呈现搜索空间(构建搜索空间)。
通过调用getSearchGraph 方法,搜索管理类对象能够获得搜索空间。
此方法返回的是一个搜索图类对象。
在搜索图中的初始状态能够通过调用getInitialState方法获得,后续状态能够通过调用SearchState.getSuccessors()方法获得。
Sphinx全套 教程
首先了解一下sphinx全文索引的相关知识官方网站:/官方文档:/docs/中文支持:/中文使用手册下载:/uploads/pdf/sphinx_doc_zhcn_0.9.pdf基本上看看上面的官方教程和中文使用手册,你应该会安装和使用Sphix全文索引,当然,还有一些细节,需要不断的google和baidu,那为了节省大家的时间,就出一个完整的Sphinx安装教程和结合PHPWI ND程序的使用教程(PHPWIND7.5版本支持)。
接下来开始Sphinx的技术之旅吧!考虑到Sphinx全文索引使用的实际需要,主要介绍Sphinx全文索引中文方面的支持。
这里需要感谢李沫南同学对Sphinx全文索引中文支持的贡献!一,Windows下安装Sphinx1,开始前的准备工作来源:/products/ft_down/下载csft3.1:/uploads/csft/3.1/win32/csft3.1.bin.zip下载标准词库:/uploads/csft/3.1/data.zip解压:csft3.1.bin.zip 如下目录,解压在C:\csft3.1目录下解压:data.zip,解压在C:\csft3.1\data目录下[分词包]需要新建log文件夹(1)复制 C:\csft3.1\conf\csft.conf.in 文件到 C:\csft3.1\bin\ 目录下,并重命名为csft. conf注意csft.conf文件里的类似:path = @CONFDIR@/data/test1把@CONFDIR@替换为C:\csft3.1\ 如上更改为:path = C:\csft3.1\ data\test1(2)把测试数据 C:\csft3.1\conf\example.sql 导入数据库[这个基本都会吧!](3)建立索引,在DOC界面下运行:indexer.exe --all 如下图,建立索引过程需要仔细检查csft.conf数据库配置是否正确。
sphinx社区全文搜索平台配置手册
千万级Discuz!数据全文检索方案(Sphinx)前言:康盛创想的Discuz!从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计,使得Discuz! 可以在极为繁忙的服务器环境下快速高效稳定运行。
由于Discuz!产品依赖MySQL数据库性能,在全文检索方面如果仅仅依靠MySQL的LIKE %关键词% 语句无法取得理想的成绩。
本文阐述经过Discuz!生产环境考验的构建在Sphinx基础上的千万级Discuz!数据全文检索解决方案。
出自俄罗斯的开源全文搜索引擎软件Sphinx在单一索引达到4千万条记录情况下的查询速度仍为0.x秒甚至0.0x秒级别。
Sphinx创建索引的速度约五分钟处理百万条记录,对于每分钟的增量索引重建只需要几十秒,每日的增量索引合并到主索引也只需一分钟左右。
此构架基础上的Discuz!高负载站点,已成功解决搜索速度慢、经常锁表、无法分布式搜索等问题。
千万级Discuz!数据全文检索方案(Sphinx)适用于繁忙的站点并且论坛访问者有大量的搜索需求,本方案主要解决搜索缓慢问题。
本文环境以CentOS 5为基准。
初始化一次全部索引,按系统计划任务crontab定时方式,每5分钟重建一次增量索引(增量索引不与主索引合并),每日凌晨3:30建立一次昨日比较的增量索引(合并到主索引中)。
主索引建立在磁盘目录/data/sphdata,增量索引建立在内存/dev/shm/中避免大量的I/O操作,由于帖子编辑限制,全部索引每两个月重建一次。
目录千万级Discuz!数据全文检索方案(Sphinx) (1)Sphinx快速介绍 (2)一、Sphinx全文检索方案构架图 (3)二、Sphinx中文分词 (4)三、Sphinx安装步骤 (4)1.安装、升级所需的程序库 (4)2.创建安装文件夹并下载源代码 (4)3.安装MMseg中文分词 (4)4.安装CSFT(Sphinx的CoreSeek修改版) (5)5.编译Sphinx过程可能出现的错误 (5)a)无法找到mysql路径 (5)b)无法找到libiconv (5)c)无法找到libmysqlclient.so.15 (5)d)php 5.2.11版本的api BUG (5)e)生成索引时容易发生磁盘空间不足写入失败的错误 (5)6.安装为php扩展(可选) (6)7.安装SphinxSE存储引擎(可选) (6)四、Sphinx配置 (6)1.mmseg中文分词词库 (6)a)词典格式 (6)b)词库生成方法 (7)2.创建sphinx数据目录结构 (7)3.创建sphinx.conf配置文件 (7)4.mmseg.ini分词配置文件 (14)5.建立Sphinx增量索引数据表 (14)6.书写常用的sphinx控制命令到sh文件 (14)7.创建相应的文件结构,初始化Sphinx的全部索引 (17)8.启动sphinx (17)9.设置计划任务项 (17)10.设置开机启动项 (17)五、通过命令行测试搜索 (17)六、通过php api调用Sphinx搜索 (18)七、通过MySQL的SphinxSE存储引擎调用Sphinx搜索(可选) (19)八、Sphinx数据占用量统计 (19)Sphinx快速介绍Sphinx是独立的搜索服务端,不依赖MySQL,当Sphinx和MySQL结合部署时,Sphinx的数据来源为MySQL。
sphinx中文分词coreseek的配置
coreseek 的配置vi csft.conf第13行改成数据源名称23行修改数据库信息73行打开这两个选项第79行写出要查询的SQL语句根据表与表结构109行根据什么表中的那一列字段来排序256行为对增量数据源的配置暂时全部注释掉271行为主索引 test1 为名字我取名为documentindex276 行 source 设置数据源的来源既是上面配置数据源的名称所以填写 document280 行path设置数据源存放的路径一般把后面的名字改成主索引的名称就是了documentindex,315,321,330 行对停词的设置默认是英文停词这里把他注释掉340行设置编码 charset_type =zh_cn.utf-8然后在后面加上一句charset_dictpath = /usr/local/mmseg/etc/ 中文字典路径353行 UTF8的注释去掉错误操作应该要注释掉477行这里是对增量索引的配置由于刚才把增量源给注释掉了所以这里也暂时先注释掉492行对分布式的设置意义不大关闭agent agent 506和507行或者全部注释掉533行推荐256M配置好过后进入bin目标生成索引/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all增量索引配置创建一个计数器的表CREATE TABLE `sph_counter` (`counter_id` int(10) unsigned NOT NULL AUTO_INCREMENT,`max_doc_id` int(11) NOT NULL,PRIMARY KEY (`counter_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8修改配置文件主数据源里面:我们需要把欲查询语句改成下面的语句: 13 行Source main{把 sql_query_pre 的改成下面的语句 79 行sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documentssql_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 )}256行配置增量索引源 src1throttlet为增量索引源名称:src1为继承的主索引源将其改成:source delta : document{sql_query_pre = set names utf8sql_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)}第485行配置增量索引 deltaindex 为增量索引名称 : 后面继承主索引487行 path 写上存放路径通常改掉后面名称为deltaindex就行并在上边加上数据源的来源index deltaindex : documentindex{source = deltapath = /usr/local/coreseek/var/data/deltaindexmorphology = stem_en}配置完成后/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --rotate --all生成所有索引/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --rotatedeltaindex生成增量索引/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --merge documentindex deltaindex合并索引给PHP安装模块tar zxf sphinx-1.1.0.tgz 解压包/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx如果提示出错:make: *** 没有指明目标并且找不到 makefile。
sphinx详细安装配置文档
sphinx详细安装配置⽂档SphinxSphinxSphinxSphinx详细安装配置详细安装配置详细安装配置详细安装配置项⽬中需要重新做⼀个关于商品的全⽂搜索功能,于是想到了⽤Sphinx,因为需要中⽂分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择⼀个,暂时不要选择原版Sphinx(对中⽂的⽀持不是很好).⼜因为服务器所⽤ MySQL在当时编译时并没有编译Sphinx扩展,⽽重新编译MySQL并加⼊Sphinx暂时⼜⽆法实现(项⽬⽤到了多台服务器,在不影响现有业务的情况下不可能去重新编译MySQL的),所以采⽤的是程序通过API来外部调⽤Sphinx.Sphinx⾃带的API有 PHP,Python,Ruby,Java等众多版本,所以基本也够⽤了,本⼈使⽤的编程语⾔是PHP所以下⽂的条⽤⽰例采⽤的是PHP版的API.⼀.安装及配置Sphinx及准备测试数据1.安装前的准备⼯作(1)请确认安装了MySQL,Gcc及常⽤的开发环境包(2)下载sphinx-for-chinese-1.10.1及中⽂分词词典xdict_1.1(下⾯两个⽅式,选⼀个即可)[1]到sphinx-for-chinese官⽅下载(强烈推荐使⽤这个)cd /usr/local/srcwget -c/files/sphinx-for-chinese-1.10.1-dev-r2287.tar.gzwget -c/files/xdict_1.1.tar.gz[2]到本站下载(国外vps,性能不怎么好,⽽且速度慢,不推荐,只做备⽤)cd /usr/local/srcwget -c/source/soft/sphinx-for-chinese-1.10.1/sphinx-for-chinese-1.10.1-dev-r2287.tar.gzwget -c/source/soft/sphinx-for-chinese-1.10.1/xdict_1.1.tar.gz2.安装sphinx-for-chinese-1.10.1cd /usr/local/srctar zxvf sphinx-for-chinese-1.10.1-dev-r2287.tar.gzcd sphinx-for-chinese-1.10.1-dev-r2287#MySQL安装在默认位置的使⽤如下命令./configure --prefix=/usr/local/sphinx-for-chinese-1.10.1 --with-mysql 如果出现如下图所⽰错误,表明MySQL不是安装在默认位置,请执⾏下⾯的命令# 如果MySQL不是安装在默认位置(特别是⾃⼰编译MySQL的,请注意),请指定MySQL的相关位置,主要是MySQL的include和lib⽬录 (Sphinx编译的时候要⽤到⾥⾯的.h头⽂件),--with-mysql-includes及--with-mysql-libs就是为了指定这两个位置的./configure --prefix=/usr/local/sphinx-for-chinese-1.10.1--with-mysql-includes=/usr/local/webserver/mysql/include/mysql--with-mysql-libs=/usr/local/webserver/mysql/lib/mysql显⽰如下图所⽰内容时,表⽰可以接着执⾏下⾯的make及make install命令makemake install#最后执⾏命令ls /usr/local/sphinx-for-chinese-1.10.1/如果显⽰bin,etc和var三个⽬录表⽰安装成功3.让Sphinx⽀持中⽂分词cd /usr/local/srctar zxvf xdict_1.1.tar.gz/usr/local/sphinx-for-chinese-1.10.1/bin/mkdict xdict_1.1.txtxdict_1.1 哪⾥都可以,包含的时候4Q 驆如果提⽰bin/mkdict: error while loading shared libraries:libmysqlclient.so.16等错误(以下命令中的libmysqlclient.so.16.0.0的位置取决于我们mysql编译安装的位置)ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0/usr/lib/libmysqlclient.so.16再次执⾏/usr/local/sphinx-for-chinese-1.10.1/bin/mkdict xdict_1.1.txtxdict_1.1#提⽰Chinese dictionary was successfully created!表⽰中⽂分词词典⽣成成功cp xdict_1.1 /usr/local/sphinx-for-chinese-1.10.1/etc/xdict_1.14.配置Sphinxvi /usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf输⼊以下内容# sphinx基本配置# 索引源source goods_src{# 数据库类型type = mysql# MySQL主机IPsql_host = localhost# MySQL⽤户名sql_user = sphinxuser# MySQL密码sql_pass = sphinxpass# MySQL数据库sql_db = sphinx# MySQL端⼝(如果防⽕墙有限制,请开启)sql_port= 3306# MySQL sock⽂件设置(默认为/tmp/mysql.sock,如果不⼀样,请指定)sql_sock = /tmp/mysql.sock 剉a # MySQL检索编码(数据库⾮utf8的很可能检索不到) sql_query_pre = SET NAMES UTF8# 获取数据的SQL语句sql_query = SELECT goods_id,goods_id ASgoods_id_new,goods_name,goods_color,goods_name ASgoods_name_search,goods_color AS goods_color_search From goods_test# 以下是⽤来过滤或条件查询的属性(以下字段显⽰在查询结果中,不在下⾯的字段就是搜索时要搜索的字段,如SQL语句中的goods_color_search,goods_name_search)# ⽆符号整型#goods_id为主键,如果加在这⾥在⽣成索引的时候会报attribute'goods_id' not found,这⾥⽤goods_id_new来变通sql_attr_uint = goods_id_new# 字符串类型sql_attr_string = goods_namesql_attr_string = goods_color# ⽤于命令界⾯端(CLI)调⽤的测试(⼀般来说不需要)#sql_query_info = SELECT * FROM goods_test Where goods_id =$goods_id;}# 索引index goods{# 索引源声明source = goods_src# 索引⽂件的存放位置path = /usr/local/sphinx-for-chinese-1.10.1/var/data/goods# ⽂件存储模式(默认为extern)docinfo = extern# 缓存数据内存锁定mlock = 0# 马⽒形态学(对中⽂⽆效)morphology = none# 索引词最⼩长度min_word_len = 1 ict_1.1.txtxdict_1.1#提⽰ChinesQ > ? # 数据编码(设置成utf8才能索引中⽂)charset_type = utf-8# 中⽂分词词典chinese_dictionary =/usr/local/sphinx-for-chinese-1.10.1/etc/xdict_1.1# 最⼩索引前缀长度min_prefix_len = 0# 最⼩索引中缀长度min_infix_len = 1# 对于⾮字母型数据的长度切割(for CJK indexing)ngram_len = 1# 对否对去除⽤户输⼊查询内容的html标签html_strip = 0}# 索引器设置indexer{# 内存⼤⼩限制默认是 32M, 最⼤ 2047M, 推荐为 256M 到 1024M之间mem_limit = 256M}# sphinx服务进程search的相关配置searchd{# 监测端⼝及形式,⼀下⼏种均可,默认为本机9312端⼝# listen = 127.0.0.1# listen = 192.168.0.1:9312# listen = 9312# listen = /var/run/searchd.sock# search进程的⽇志路径log = /usr/local/sphinx-for-chinese-1.10.1/var/log/searchd.log# 查询⽇志地址query_log = /usr/local/sphinx-for-chinese-1.10.1/var/log/query.log# 读取超时时间read_timeout = 5sql_sock = /tmp/mysql.sock 剉/Q ? # 请求超时市时间client_timeout = 300# searche进程的最⼤运⾏数max_children = 30# 进程ID⽂件pid_file =/usr/local/sphinx-for-chinese-1.10.1/var/log/searchd.pid# 最⼤的查询结果返回数max_matches = 1000# 是否⽀持⽆缝切换(做增量索引时需要)seamless_rotate = 1# 在启动运⾏时是否提前加载所有索引⽂件preopen_indexes = 0# 是否释放旧的索引⽂件unlink_old = 1# MVA跟新池⼤⼩(默认为1M)mva_updates_pool = 1M# 最⼤允许的⽹络包⼤⼩(默认8M)max_packet_size = 8M# 每个查询最⼤允许的过滤器数量(默认256)max_filters = 256#每个过滤器最⼤允许的值的个数(默认4096)max_filter_values = 4096# 每个组的最⼤查询数(默认为32)max_batch_queries = 32}# Sphinx配置⽂件结束中⽂在linux下可能会看到乱码,不⽤管5.创建测试数据库并添加测试内容(请先连上⾃⼰的MySQL数据库),在MySQL中执⾏如下命令 -1.10.1/var/log/query.log# $Q 鈲 mysql> create database sphinx collate 'utf8_general_ci';mysql> grant all privileges on sphinx.* to 'sphinxuser'@'%' identifiedby 'sphinxpass';mysql> grant all privileges on sphinx.* to 'sphinxuser'@'localhost'identified by 'sphinxpass';mysql> use sphinx;mysql> CREATE TABLE IF NOT EXISTS `goods_test` (\`goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品id',\ `goods_name` varchar(255) NOT NULL COMMENT '商品名称',\`goods_color` varchar(60) NOT NULL COMMENT '商品颜⾊',\PRIMARY KEY (`goods_id`)\) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='商品表,sphinx⽰例' AUTO_INCREMENT=11 ;\mysql> INSERT INTO `goods_test` (`goods_id`, `goods_name`, `goods_color`) VALUES\(1, '热卖时尚双肩背包', '⿊⾊'),\(2, '热卖时尚电脑双肩背包', '灰⾊'),\(3, '缤纷炫动时尚化妆包', '⿊⾊'),\(4, '缤纷炫动时尚化妆包', '蓝⾊'),\(5, '缤纷炫动时尚化妆包', '粉红'),\(6, '极致性感⼥款衬衫', '⿊⾊'),\(7, '个性宣⾔男款短袖衬衫', '蓝⾊'),\(8, '个性宣⾔男款短袖衬衫', '红⾊'),\(9, '个性宣⾔男款短袖衬衫', '绿⾊'),\(10, '个性宣⾔男款短袖衬衫', '⿊⾊');\好了,万事俱备了,可以开始实战操作Sphinx了⼆.实战操作Sphinx1.建⽴索引(如果配置⽂件有改动,应该重新⽣成索引⽂件,如果下⾯第3点中的searchd进程已经开启的话,应先关闭)#⽣成goods索引[需要确保要连接的主机的MySQL数据库正常运⾏,并且3306端⼝可以访问]/usr/local/sphinx-for-chinese-1.10.1/bin/indexer -c/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf goods#如果配置⽂件⾥有多个索引,需要⼀次⽣成使⽤--all参数/usr/local/sphinx-for-chinese-1.10.1/bin/indexer -c/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf --all2.在linux命令⾏下测试搜索/usr/local/sphinx-for-chinese-1.10.1/bin/search -c/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf 个性⿊⾊ sql_port= 3306# MySQL sock⽂件设置(膖Q Gx?搜索结果如下图⽰3.开启守护进程(供API调⽤,如果配置⽂件改动,应重新启动这个进程,不然搜到的数据不是最新)/usr/local/sphinx-for-chinese-1.10.1/bin/searchd -c/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf & #执⾏后记得再按回车# 防⽕墙需要开放9312端⼝供外部访问9312端⼝(3306是MySQL的端⼝)/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT/sbin/iptables -I INPUT -p tcp --dport 9312 -j ACCEPT/etc/rc.d/init.d/iptables save三.外部API调⽤(PHP版)注意使⽤时前提是执⾏了如下命令,⽽且防⽕墙也开启了9312端⼝/usr/local/sphinx-for-chinese-1.10.1/bin/searchd -c/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf & #执⾏后记得再按回车1. 把/usr/local/src/sphinx-for-chinese-1.10.1-dev-r2287/api/sphinxapi.php弄出来,和下⾯第2点中的search.php放在同级⽬录(这个只是⽰例,放在哪⾥都可以,包含的时候找到正确的sphinxapi.php的位置即可)2.编辑search.php⽂件,内容如下(具体内容请读者⾃⼰定,我这⾥只是⽰例) <?phpheader('Content-Type: text/html;charset="UTF-8"');if ($_GET) {// 关键词$keyword = urldecode(trim(strip_tags($_GET['keyword'])));if ($keyword) {// 包含Sphinx的api⽂件 require_once 'sphinxapi.php';// sphinx服务器地址$server = '192.168.128.130';// 端⼝$port = 9312;// 索引名为*时表⽰搜索所有索引$indexName = 'goods';// 分页页码$page = intval($_GET['page']) > 1 ? intval($_GET['page']) : 1;// 每页显⽰的数量$pageSize = 30;$sphinx = new SphinxClient();// 建⽴连接$sphinx->SetServer($server, $port);// 连接超时时间(⾮常必要,⽐如sphinx服务器挂了等异常情况) 单位为s,秒$sphinx->SetConnectTimeout(3);// 最⼤查询时间单位为ms,毫秒$sphinx->SetMaxQueryTime(2000);// 按分页取结果$sphinx->SetLimits(($page-1)*$pageSize, $pageSize); //第⼀个参数为offset,第⼆个参数为limit// 模式// $sphinx->SetMatchMode(SPH_MATCH_EXTENDED);// 取到的原始数据$orgDatas = $sphinx->Query($keyword, $indexName);// 调试⽤,如果有错误的话,可以打印$errors的值$errors = $sphinx->GetLastError();var_dump($errors);echo '<pre>';var_dump($orgDatas);/* // 下⾯是对结果的处理$datas = array('goods'=>array(),'total'=>0);if ($orgDatas['total'] > 0) {$datas['total'] = $orgDatas['total'];foreach ($orgDatas['matches'] AS $val) {$val['attrs']['goods_id'] =$val['attrs']['goods_id_new'];unset($val['attrs']['goods_id_new']);$datas['goods'][] = $val['attrs'];}}var_dump($datas); ?./configure --prefix=/usr/local/sphinx-for_Q lT? */}} else {echo '<form method="get"><input type="type" name="keyword"><input type="submit" value="商品搜索"></form>';}>代码可以点此处下载/source/soft/sphinx-for-chinese-1.10.1/sphinxapi.tar.gz更多详细配置请参看/usr/local/sphinx-for-chinese-1.10.1/etc/sphinx.conf.dist⽂件⾥⾯有包括实时索引,增量索引等很多内容,英⽂原版的,很详细 ?。
Sphinx_使用经验分享
系统B: 系统 : 前端调用复杂; 前端调用复杂; 使用全表扫描, 使用全表扫描, 搜索速度慢;对 搜索速度慢 对 结果的没有排序 ;难于最快找到 最精确的数据
引言
改进要点: 1、高速的索引建立; 2、避免对数据库做like操作,减少压力; 3、对搜索的结果进行权重排序; 4、前端开发调用方便; 5、最好门槛低,易于掌握且后期维护
Sphinx 优缺点
缺点:
必须要有主键 主键必须为整型 不负责数据存储 配置不灵活 ()
Diagram
4
系统的安装部署
系统的安装部署
安装步骤:
中文分词工具mmseg 数据库mysql • Sphinx插件补丁(SphinxSE) • Sphinx中文支持 安装Sphinx • 配置
系统的安装部署
安装中文分词工具mmseg
:
系统的安装部署
安装MySQL数据库 :
cd /opt/search/src tar xf sphinx-0.9.8-rc2.tar.gz tar xf mysql-5.1.29-rc.tar.gz cd sphinx-0.9.8-rc2 patch –p1 < ../sphinx-0.98rc2.zhcn-support.patch ##sphinxse插件 patch –p1 < ../ fix-crash-in-excerpts.patch ##sphinx支持中文 cp –rf mysqlse /opt/search/src/mysql-5.1.29-rc/storage/sphinx cd /opt/search/src/mysql-5.1.29-rc/ ./configure --prefix=/opt/search/app/mysql \ --localstatedir=/opt/search/app/mysql/var \ --without-debug --with-charset=gbk --with-client-ldflags=-all-static \ --enable-assembler --with-extra-charsets=all \ --enable-thread-safe-client --with-plugins=innobase,partition,sphinx make make install make clean
Sphinx+LibMMSeg搭建中文全文搜索引擎_安装配置
本文来源:/start_and_end/blog/item/28467c069e2a3b700308817d. htmlSphinx+LibMMSeg搭建中文全文搜索引擎_安装配置2009年12月30日星期三下午 07:00Sphinx为俄罗斯制作的开源搜索引擎,现在最新版本为0.9.8LibMMSeg为制作的基于复合最大匹配算法的中文分词法的中文分词库,采用Chih-Hao Tsai的MMSEG算法。
同时还为sphinx做了中文支持补丁,目前最新补丁针对sphinx 0.9.8 rc2安装mmesgwget /uploads/sources/mmseg-0.7.3.tar.gztar -xzvf mmseg-0.7.3.tar.gzcd mmseg-0.7.3./configuremakemake installcd ..下载sphinx并打中文补丁wget/uploads/sources/sphinx-0.98rc2.zhcn-support.p atchwget/uploads/sources/fix-crash-in-excerpts.patch wget /downloads/sphinx-0.9.8-rc2.tar.gztar -xzvf sphinx-0.9.8-rc2.tar.gzcd sphinx-0.9.8-rc2patch -p1 < ../sphinx-0.98rc2.zhcn-support.patchpatch -p1 < ../fix-crash-in-excerpts.patchcd ..下载MySQL数据库,添加se支持wget/archives/mysql-5.0/mysql-5.0.37.tar.gztar -xzvf mysql-5.0.37.tar.gzcd mysql-5.0.37patch -p1 < ../sphinx-0.9.8-rc2/mysqlse/sphinx.5.0.37.diffBUILD/autorun.shmkdir -p sql/sphinxcp ../sphinx-0.9.8-rc2/mysqlse/* sql/sphinxCFLAGS="-g -O2 -fno-omit-frame-pointer" CXX="gcc" \CXXFLAGS="-g -felide-constructors -fno-exceptions -fno-rtti -O2-fno-omit-frame-pointer" \CXXLDFLAGS="" \./configure –prefix=/usr/local/mysql-5-sphinx \–enable-assembler \–with-extra-charsets=complex \–enable-thread-safe-client \–with-readline \–with-big-tables \–enable-local-infile \–with-sphinx-storage-enginemakemake installcd ..编译安装sphinxcd sphinx-0.9.8-rc2/CPPFLAGS=-I/usr/include/python2.4LDFLAGS=-lpython2.4./configure –prefix=/usr/local/sphinx–with-mysql=/usr/local/mysql-5-sphinxmakemake installcd ../配置sphinxsource ds_discuz{type = mysqlsql_host = 127.0.0.1sql_user = discuzsql_pass = discuz@1\#sql_db = discuzsql_port = 3306 # optional, default is 3306sql_query_pre = SET NAMES utf8sql_query_pre = SET SESSIONquery_cache_type=OFFsql_query = \SELECT pid, fid,tid,authorid, dateline, \subject, message \FROM cdb_posts \WHERE pid > $start AND pid <= $endsql_query_range = SELECT MIN(pid),MAX(pid) FROM cdb_postssql_range_step = 1000sql_ranged_throttle = 1000sql_attr_uint = fidsql_attr_uint = tidsql_attr_uint = authoridsql_attr_timestamp = datelinesql_query_info = SELECT * FROM cdb_posts WHERE pid=$id}index discuz{source = ds_discuzpath =/usr/local/sphinx/var/data/discuzdocinfo = externcharset_type = zh_cn.utf-8charset_dictpath = /usr/local/sphinx/data/min_prefix_len = 0min_infix_len = 0min_word_len = 2}indexer{mem_limit = 64M}searchd{port = 3312log =/usr/local/sphinx/var/log/searchd.logquery_log =/usr/local/sphinx/var/log/query.logread_timeout = 5max_children = 30pid_file =/usr/local/sphinx/var/log/searchd.pidmax_matches = 1000seamless_rotate = 1preopen_indexes = 0unlink_old = 1}建立索引/usr/local/sphinx/bin/indexer –config/usr/local/sphinx/etc/sphinx.conf启动 searchd 服务/usr/local/sphinx/bin/searchd –config/usr/local/sphinx/etc/sphinx.conf测试 searchd 服务<?phprequire "sphinxapi.php";$q = $_POST['search'];if ($q=='') $q = '测试搜索引擎是否运行正常';echo "<form action='?' method='post'>search<input name='search' value='$q'><input type='submit' name='sub'></form>";echo "<br/>";echo "seach $q<br/>";$cl = new SphinxClient();$cl->SetServer('127.0.0.1', 3312);$cl->SetMatchMode(SPH_MATCH_ALL);$index="*";$res = $cl->Query($q, $index);print_r($res);?>到这儿,基本的安装配置就完成了,如果不使用修改了增加了se引擎的MySQL 存储数据,就利用不了和搜索结果的交叉查询,中间关于MySQL安装的那一段可以去除。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
# MySQL specific client connection flags
# mysql 具体的客户端连接标识
# optional, default is 0
# 可选,默认置为0
# mysql_connect_flags = 32 # enable compression
# if using ranged query:
# sql_query = \
# SELECT doc.id, doc.id AS group, doc.title, doc.data \
# FROM documents doc \
# WHERE id>=$start AND id<=$end
# pre-query, executed before the main fetch query
# 预先查询,执行前的主要取的多值查询操作
# multi-value, optional, default is empty list of queries
# 可选,默认值为空的查询清单
# equivalent to sql_attr_uint with 1-bit size
# 相当于 sql_sttr_uint 给1位的长度
# sql_attr_bool = is_deleted
# bigint attribute declaration
# 大整型属性声明
## Sphinx configuration file sample
# 斯芬克斯样例配置文件
#
# WARNING! While this sample file mentions all available options,
# it contains (very) short helper descriptions only. Please refer to
# 以下部份设置DSN,根据不同情况进行不同设置
# odbc_dsn = DBQ=C:\data;DefaultDir=C:\data;Driver={Microsoft Text Driver (*.txt; *.csv)};
# sql_query = SELECT id, data FROM documents.csv
sql_query_pre = SET NAMES utf8
# 预查询设置字符集utf8,切记不要加中横线
# sql_query_pre = SET SESSION query_cache_type=OFF
# 设置查询的SESSION query_cache_type为关闭状态
# mysql_ssl_cert = /etc/ssl/client-cert.pem
# mysql ssl证书路径
# mysql_ssl_key = /etc/ssl/client-key.pem
# 证书key
# mysql_ssl_ca = /etc/ssl/cacert.pem
# 查询范围设置,查询必须设置一个返回的最大值和最小值
# optional, default is empty
# 可选项,默认值为空
# sql_query will need to reference $start and $end boundaries
# SQL_QUERY 需要引用一个$start 和$end 边界
# 多值,准许任意数量的属性
# optional bit size can be specified, default is 32
# 可选的位大小是可以被指定的,默认为32
# sql_attr_uint = author_id
# sql_attr_uint = forum_id:9 # 9 bits for forum_id 存储9位给forum_id这个字段
பைடு நூலகம்
# UNIX socket name
# unix soket名称
# optional, default is empty (reuse client library defaults)
# 可选,默认为空(重用默认客户端库默认)
# usually '/var/lib/mysql/mysql.sock' on Linux
# multi-value (an arbitrary number of attributes is allowed), optional
# 多值(准许任意数量的属性),可选
# declares a signed (unlike uint!) 64-bit attribute
# 声明一个签名的64位属性
#####################################################################
# some straightforward parameters for SQL source types
# 一些简单的数据源类型参数
sql_host = localhost
# linux服务器上通常在以下路径'/var/lib/mysql/mysql.sock',根据具体情况不同而进行设置不同
# usually '/tmp/mysql.sock' on FreeBSD
# FreeBSD操作系统通常在/tmp/mysql.sock路径下
# sql_sock = /var/lib/mysql/mysql.sock
# MSSQL 具体的身份验证模式标识
# MUST be in sync with charset_type index-level setting
# 必须在sync(同步)设置charset_type的索引级别
# optional, default is 0
# 可选的,默认值为0
# sql_query_range = SELECT MIN(id),MAX(id) FROM documents
# 查询范围:查询最小值和最大值从documents文档。 此处的documents文档是指样例中的example.sql中的.sql文件
# range query step
# main document fetch query
# mandatory, integer document ID field MUST be the first selected column
# 主要文件查询强制提取,整型文档ID字段必须为首选列
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
# range query setup, query that must return min and max ID values
## data source definition 数据源定义
#
# source 名字{
# 选项
# }
#############################################################################
source src1
# 范围查询步骤
# optional, default is 1024
# 可选项,默认值为1024
# sql_range_step = 1000
# unsigned integer attribute declaration
# 无符号整型声明
# multi-value (an arbitrary number of attributes is allowed), optional
# 启用压缩
# MySQL specific SSL certificate settings
# mysql 具体的 SSL(安全套接层)证书设置
# optional, defaults are empty
# 可选项,默认值为空
# 从服务器响应unicode数据
# ODBC specific DSN (data source name)
# ODBC 具体的DSN(注:何为DSN?DSN为数据源名)
# mandatory for odbc source type, no default value
sql_attr_uint = group_id
# boolean attribute declaration
# 布尔属性声明
# multi-value (an arbitrary number of attributes is allowed), optional
# 多值(准许任意数量的属性),可选
# doc/sphinx.html for details.
#
#警告!虽然这个配置文件列出了所有的可用选项,但是它包只包含非常短的帮助描述和简介,请访问并参考doc文件夹下的sphinx.html获得更加详细的帮助
#############################################################################
# mssql_winauth = 1 # use currently logged on user credentials
# 使用当前用户登陆凭据
# MS SQL specific Unicode indexing flag