Sphinx-Coreseek 检索系统介绍
Coreseek:中文检索系统
吗?这里是C ia n , hn U i 我们想用。”这是第一个收 员很重要 , 易安装也意味着实施人员成本的降 x 容 到钱的用户, 也是第一个有较大流量的网站用户。 有 了这 个典 型用户 ,后面 的事 情相 对容 易一些
低 。 对 于 开 源软 件 厂 商来 说 ,易用 性 却 可 能 是 但
收评审时,当时的领导突然问:“ 为什么你不直接
( 基于N— rm),但建 立索 引的速度非常慢 , Ga 索
使用N b rae 你的系统有什么优势?”我当时 引文件非常大。 Hien t?
6 0
Co e o y 封 面报 道 }我 们 的 开 源 vr St r
Xa in pa :代码非常清晰,倒排索 引的存储方式和 最大 的问题 。我 尝试过 各种方 法去 让别 人知道 My QL 似 , 持多种存 储模 式 , 码清 晰相 S 类 支 代
扫楼 : 保险的、推销 信用卡的 , 卖 通常会 采用扫 楼的方式展开业务。而用扫楼的方式推销开源软
件 , 许 我 是头 一 个 。印了不 少 推广 的 文字 材 料 , 也
间里 , 基于全文检索技术创 业的公司非常 多, 绝 大多数公司 ( 在我所知是10 都 是基于L cn 0 %) ue e 进行 了二 次开 发 ,我非常 不希 望被 人看 成 Y t e
'
,
ov rS oy 封 面 报 道 }我们 的开 源 e tr
C r k 中文检 索 系统 o e e : s e
文, 李沫 南
缘起
哑 口无 言 , 过 现在 看 来 , 不 创造 自己的O M I具 , R 除 了满 足 了 过 分 旺 盛 的 创 造欲 之 外 , 没 有 额 外 并
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 全文搜索引擎
Sphinx 全文搜索引擎1:索引与全文索引的概念数据库中,表中的行特别多,如何快速的查询某一行,或者某一个文章中的单词,索引--->查询速度快全文索引-->针对文章内容中的单词各做索引2:mysql支不支持全文索引?答:支持, 但是A:innoDB引擎在5.5,及之前的版本不支持(5.7实测可以在innodb上建fulltext),只能在myisam 引擎上用fulltextB: mysql的全文索引功能不够强大C: 无法对中文进行合理的全文索引----- mysql.无法进行中文分词.注意:全文索引的停止词停止词是指出现频率极高的单词, 不予索引.如果某单词出现频率50%以上,列为停止词或者是经过统计的常用词,也列为停止词---如is, are , she, he, this 等等就像中文中: “的”,”是”,”呵呵”总结: 我们要对中文做全文搜索引擎,需要解决2个问题1: 性能提高,用第3方的全文搜索引擎工具,如sphinx, solr等2: 中文分词! (如mmseg)编译安装sphinx+mmseg == coreseek官网: 0: 安装工具包yum install make gcc gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel1: 下载解压源码,ls查看csft-4.1 mmseg-3.2.14 README.txt testpack其中--csft-4.1是修改适应了中文环境后的sphinxMmseg 是中文分词插件Testpack是测试用的软件包2: 先安装mmseg2.1: cd mmseg2.2: 执行bootstrap脚本2.3: ./configure --prefix=/usr/local/mmseg2.4: make && make install3: 再安装sphinx(coreseek)3.1: 到其目录下执行buildconf.sh3.2: ./configure --prefix=/usr/local/sphinx--with-mysql=/usr/local/mysql--with-mmseg--with-mmseg-includes=/usr/local/mmseg/include/mmseg/--with-mmseg-libs=/usr/local/mmseg/lib/3.3: make installSphinx的使用分三个部分:1: 数据源---要让sphinx知道,查哪些数据,即针对哪些数据做索引(可以定义多个源)2: 索引配置--针对哪个源做索引, 索引文件放在哪个目录?? 等等3: 搜索服务器----sphinx可以在某个端口(默认9312),以其自身的协议,与外部程序做交互.具体的步骤:1: 数据源典型配置source test {type = mysqlsql_host = localhostsql_user = rootsql_pass =sql_db = testsql_query_pre = set names utf8sql_query_pre = set session query_cache_type=offsql_query = select id,catid,pubtime,title,content from newssql_attr_uint = idsql_attr_uint = catidsql_attr_timestamp = pubtimesql_query_info = select * from news where id=$id}2: 索引典型配置index test {type = plainsource = testpath = /usr/local/sphinx/var/data/test #生成索引放在哪docinfo = externcharset_dictpath = /usr/local/mmseg/etc/charset_type = zh_cn.utf-8}2.1: 生成索引文件/path/sphinx/bin/indexer -c ./etc/sphinx.test.conf test (test是索引名)2.2: 查询测试A:在命令下,用path/bin/search -c ./path/conf 关键词B:开启搜索服务器,利用客户端连接搜索服务器来查询,见下3: 配置搜索服务器接口,启动搜索服务器searchd {listen = localhost:9312pid_file = /usr/local/sphinx/var/log/searchd.pidlog = /usr/local/sphinx/var/log/test.logquery_log =/usr/local/sphinx/var/log/test.query.logclient_timeout = 5max_children = 5max_matches = 1000seamless_rotate = 1}3.2 : 使用客户端连接搜索服务器1)系统testpack包里带的sphinxapi.php2)编译php的sphinx扩展1: 官方搜索下载sphinx扩展的压缩包并解压(假设解析在/usr/local/src/sphinx) 2: /path/php/bin/phpize 执行3: configure --with-php-config=/xxx/path/php/bin/php-config出错: e rror: Cannot find libsphinxclient headers错误原因: 没有预告编译libsphinxclient4: 解决3中的错误cd /usr/local/src/sphinx/api/libsphixclient/目录下# sh buildconf.sh# ./configure# make && make install5: 编译php的sphinx.so扩展# cd /path/to/sphinx1.3.0/#./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx# make && make install6: 编辑php.ini,把sphinx.so扩展引入并重启apache, 如果是php-fpm方式运行,则重启php-fpm进程查询分3部分1: 查询2: 过滤3: 排序1.1: 查询的模式查询的模式直接影响查询结果,SPH_MA TCH_ALL, 匹配所有查询词(默认模式);SPH_MA TCH_ANY, 匹配查询词中的任意一个;SPH_MA TCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配;SPH_MA TCH_BOOLEAN, 将查询看作一个布尔表达式SPH_MA TCH_ALL->Query(‘西瓜南瓜’) // 文档中有西瓜并且有南瓜才被选中SPH_MA TCH_ANY //->Query(‘西瓜南瓜’) // 文档中有西瓜或有南瓜被选中S PH_MA TCH_PHRASE // 严格理解为两词连续如内容”西瓜南瓜东瓜”->Query(‘西瓜南瓜’), 可以命中->Query(‘西瓜东瓜’), 不能命中, 因为西瓜东瓜两词不连续如果你觉得切换模式麻烦,可用BOOLEAN模式SPH_MA TCH_BOOLAN / /这个模式,能达到上3个模式的效果,需要在查询词之间做表达式如words1 & words2 则等同SPH_MA TCH_ALLWords1 | words2 则,等同SPH_MA TCH_ANYWords1 << word2 则是word1,word2都要有,且words1出现在word2前面1.2: 按字段查询如:要求只查content字段中的”西瓜”关键词“西瓜”====>”@content 西瓜”注意: 按字段查询需要把查询模式设置成”SPH_MA TCH_EXTNEDED”2 按属性过滤SetIDRange($min,$max); // 按id的范围过滤SetFilter($attr,$values=array(),$exclue=false); //SetFilterRange ( $attribute, $min, $max, $exclude=false )SetFilterFloatRange (设置浮点数范围)SetLimits($offset,$limits) //设置偏移量及取出条目例:->SetIDRange(2,3);->SetLimits(2,2); 取第3-4条->SetFilter(‘catid’,array(3,4),false) ; 以catid in (3,4) 为条件进行过滤->SetFilter(‘catid’,array(3,4),true) ; 以catid not in (3,4) 为条件,进行过滤注意:如果setLimits中碰到”per-query max_matches=0 out of bounds (per-server max_matches=1000)”错误,可以通过给setLimits指定第3个参数为大于0的整数,来解决.3: 按属性或权重排序排序模式:SPH_SORT_RELEV ANCE 模式, 按相关度降序排列(最好的匹配排在最前面)SPH_SORT_ATTR_DESC 模式, 按属性降序排列(属性值越大的越是排在前面)SPH_SORT_ATTR_ASC 模式, 按属性升序排列(属性值越小的越是排在前面)SPH_SORT_TIME_SEGMENTS 模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序SPH_SORT_EXTENDED 模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。
coreseek在windows和linux下的使用
Sphinx 的安装及使用一、为什么要使用sphinx假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时候你就可以考虑使用 sphinx了二、Sphinx是什么它是一个高性能的全文搜索软件包。
全文搜索是指以文档的全部文本信息作为检索对象的一种信息检索技术,检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。
三、Sphinx的特性高速索引(在新款CPU上,近10M/s)高速搜索(在2-4G的文本量中平均查询速度不到0.1秒)高可用性(单CPU上最大可支持100GB的文本,100M文档)提供良好的相关性排名支持分布式搜索提供文档摘要生成支持每个文档多属性支持断词四、下载并安装sphinx/news/7/52/找到适合自己操作系统的版本,linux下下载源码包,编译安装。
Coreseek是基于sphinx开发的一款软件,对sphinx做了一些改动,在中文方面支持得比sphinx好。
下载完成后,解压到想解压的地方,比如E盘根目录下,更名为coreseek。
Coreseek就安装完成了。
解压后的目录如下:五、Sphinx的使用要使用sphinx需要做以下几件事1)首先数据库里得有数据2)建立sphinx配置文件3)生成索引4)启动sphinx5)在程序中通过api调用 sphinx,获取数据1)、导入数据解压的文件里找到 var/test/documents.sql 执行,建立documens表。
2)、建立配置文件接下来我们需要建立一个sphinx的配置文件 E:\coreseek\etc\mysql.conf,将其内容改为下面这些:source mysql{Type= mysqlsql_host = localhostsql_user = rootsql_pass =sql_db = testsql_port = 3306sql_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)sql_attr_uint = group_idsql_attr_timestamp = date_added}index mysql{source = mysqlpath = E:/coreseek/var/data/mysqlcharset_dictpath = E:/coreseek/etc/charset_type= zh_cn.utf-8}searchd{Listen= 9312max_matches = 1000pid_file = E:/coreseek/var/log/searchd_mysql.pidlog = E:/coreseek/var/log/searchd_mysql.logquery_log = E:/coreseek/var/log/query_mysql.log}先讲一下这个配置文件中每项的含义。
PHP中提高搜索性能的Coreseek(Sphinx)
PHP中提高搜索性能的Coreseek(Sphinx)1.PHP中提高搜索性能的Coreseek(Sphinx)1.1.什么是Coreseek(Sphinx)Coreseek 是一款中文全文检索/搜索软件,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域.Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。
1.2.为什么使用Sphinx和数据库相比Sphinx是专业做搜索,相比数据库的效率要高很多.1. 索引和搜索性能优异;2. 先进的索引和查询工具 (灵活且功能丰富的文本分析器,查询语言,以及多种不同的排序方式等等);3. 先进的结果集分析处理 (SELECT 可以使用表达式, WHERE, ORDER BY, GROUP BY 等对全文搜索结果集进行过滤);4. 实践证实可扩展性支持数十亿文档记录,TB级别的数据,以及每秒数千次查询;5. 易于集成SQL和XML数据源,并可使用SphinxAPI、SphinxQL或者SphinxSE搜索接口6. 易于通过分布式搜索进行扩展1.3.Sphinx在哪里使用适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景. 只要需要搜索的地方都可以使用Sphinx提高搜索效率.2.Sphinx核心概念2.1.全文检索程序的工作流程如果信息检索系统在用户发出了检索请求后再去互联网上找答案,根本无法在有限的时间内返回结果。
所以要先把要检索的资源集合放到本地,并使用某种特定的结构存储,称为索引(中国叫做目录),这个索引的集合称为索引库。
由于索引库的结构是按照专门为快速查询设计的,所以查询的速度非常快。
我们每次搜索都是在本地的索引库中进行,如下图:从图片上可以看出,我们不仅要搜索,还要保证数据集合与索引库的一致性。
Sphinx架构介绍(小树苗)
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编码;。
Sphinx+Python+Oracle构建全文检索系统
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系统上所有的网页内容。
在windows下sphinx和coreseek中文检索引擎配置
在windows下Coreseek的配置安装与测试一、安装:1. 安装Python2.6 Windows (x86)(必须,32位系统和64位系统均安装该版本):从ActiveState官方网站下载ActivePython 2.6 Windows (x86),然后安装;您也可从华军软件园下载ActivePython 2.6 Windows (x86),然后安装;2. 安装 Microsoft Visual C++ 2005 Redistributable Package (x86)(必须,32位系统和64位系统均安装该版本):从微软官方网站下载Microsoft Visual C++ 2005 Redistributable Package (x86),然后安装;3. 安装 Coreseek-3.2.13(必须):【2010年11月14日更新,支持命令行中文搜索测试】从Coreseek官方网站下载/uploads/csft/3.2/coreseek-3.2.13-win32.zip解压coreseek-3.2.13-win32.zip到coreseek-3.2.13-win32目录,重命名为sphinx,任意存放。
二、coreseek中文全文检索测试直接运行coreseek-3.2.13-win32目录下的test.cmd文件,如果没出任何问题,则一切测试正常,相关手工命令测试请访问:/products-install/install_on_windows/三、部分命令的说明使用这一切命令的输入都在“cmd命令提示符”窗口里操作,假如:把sphinx目录放在D 盘下,以下的所有例子将以这路径操作,不再说明。
1)、创建全部索引:(注:这里的索引不是数据库里的索引,是不同的概念,这只对于coreseek而言,别混淆)bin\indexer –c etc\csft_mysql.conf --all备注:其中etc\csft_mysql.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。
搭建coreseek(sphinx+mmseg3)社工库
搭建coreseek(sphinx+mmseg3)社工库环境:Centos6.6 x64 + Nginx1.8 (或Apache2.x)版本:Coreseek-4.1功能演示:/[第一步] 先安装mmseg3安装支持库yum install -y make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel php-devel //如果后面编译时缺少,再重装一次提前安装PHP支持yum remove php php-bcmath php-cli php-common php-devel php-fpm php-gd php-imap php-ldapphp-mbstring php-mcrypt php-mysql php-odbc php-pdo php-pear php-pecl-igbinary php-xmlphp-xmlrpc //如安装先卸载rpm -Uvh /yum/el6/latest.rpmyum install -y php54w php54w-bcmath php54w-cli php54w-common php54w-devel php54w-fpmphp54w-gd php54w-mbstring php54w-mcrypt php54w-mysql php54w-odbc php54w-pdo php54w-pear php54w-pecl-igbinary php54w-xml php54w-xmlrpc php54w-opcache php54w-intl php54w-pecl-memcachecd /optwget /uploads/csft/4.0/coreseek-4.1-beta.tar.gztar zxvf coreseek-4.1-beta.tar.gzcd coreseek-4.1-beta/mmseg-3.2.14./bootstrap./configure --prefix=/usr/local/mmseg3make && make install遇到的问题:error: cannot find input file: src/Makefile.in或者遇到其他类似error错误时...解决方案:依次执行下面的命令,我运行'aclocal'时又出现了错误,解决方案请看下文描述yum -y install libtoolaclocallibtoolize --forceautomake --add-missingautoconfautoheadermake clean安装好'libtool'继续从'aclocal'开始执行上面提到的一串命令,执行完后再运行最开始的安装流程即可。
强大的开源全文检索引擎——Sphinx
强大的开源全文检索引擎——Sphinx
乔楚
【期刊名称】《程序员》
【年(卷),期】2011(000)003
【摘要】随着互联网的发展,Web2.0带来了信息的井喷,我们可以接触和处理的数据越来越丰富,规模也越来越庞大。
不管是互联网网站还是企业自身,都需要对大量的数据进行管理和分析,并且用户对信息的组织、查询、可寻性、及时性的要求也越来越高,这一切都离不开全文检索引擎。
【总页数】2页(P126-127)
【作者】乔楚
【作者单位】不详
【正文语种】中文
【中图分类】TP393
【相关文献】
1.开源全文检索引擎Lucene本地化实践研究 [J], 吴鹏飞;马凤娟;李文革;郭鹏
2.基于Heritrix和Sphinx的购物比较搜索引擎研究 [J], 李远远;吕焱飞
3.基于Sphinx+MySql+Python的站内搜索引擎的设计与实现 [J], 周安
4.Sphinx+ Python +Oracle构建全文检索系统 [J], 徐佳男
5.基于Sphinx的社交网络搜索引擎的设计与分析 [J], 孙逸敏
因版权原因,仅展示原文概要,查看原文内容请购买。
sphinx全文索引
1、什么是全文检索 2、什么是sphinx 3、MMSEG 4、coreseek安装 5、影视库列表页检索
什么是全文据检索
• 1、全文数据:指没有固定格式或不定长的数据, 如影片简介 • 2、索引:把非结构化的数据中的内容提取出来一 部分重新组织,让它变的有结构化,这部分我们 提取出来的数据就叫做索引.
php里面如何去搜素
还可以设置filter
返回结果的形式
index的定义
增量索引
• 实例: • 句子 “迅雷不及掩耳盗铃” • Mmseg分词算法得到4个chunks,如下 # 1 2 3 4 chunk 迅雷_不及_掩耳 迅雷_不及_掩耳_盗铃 迅雷_不及_掩耳盗铃 迅雷不及掩耳_盗_铃 长度 6 8 8 8
• 使用规则1得到3个chunk,然后使用规则2计算平 均长度
# 2 3 4 chunk 迅雷_不及_掩耳_盗铃 迅雷_不及_掩耳盗铃 迅雷不及掩耳_盗_铃 长度 8 8 8 平均长度 2 2.67 2.67
2、将文档传给分词工具(MMSEG) 分词工具将全文文档分成一个一个的词元 最后可能得到 迅雷 看看 网络 高清影院 云播 看 黄片 你懂 的
3、MMSEG 检测同义词/复合分词 “迅雷” 有两个近义词:“下载” 和 “黄 片”
4、将得到的词传给索引组件 1)、Indexer利用得到的词创建一个字典。
2
2 1
1
… 2 …
1 1 1 1
2
1
你懂的
1
2
1
• 二、如何对索引进行搜索
• • • • 第一步:用户输入查询语句. 第二步:对查询语句进行分词 第三步:搜索索引,得到符合语法树的文档. 第四步:根据得到的文档和查询语句的相关性,对结果进 行排序.
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分布图
相当于数据库的中间层,缓解数据库的压力
manticoresearch 用法
manticoresearch 用法Manticore Search是一个基于开源搜索引擎Sphinx开发的全文检索解决方案。
它提供了强大的搜索和分析功能,是许多企业和网站用于构建高性能搜索引擎和复杂信息检索系统的首选工具。
Manticore Search的用法非常灵活,既可以作为单机版本使用,也可以通过分布式部署来处理大规模数据。
以下是一些关于Manticore Search的用法和功能的相关参考内容。
1. 安装和配置你可以在Manticore Search的官方网站上找到详细的安装和配置指南,这将帮助你快速启动Manticore Search并进行基本配置。
这些指南提供了在各种操作系统上安装Manticore Search的详细说明,以及如何设置索引和搜索项。
2. 索引和搜索Manticore Search支持多种类型的索引,包括全文搜索、属性过滤和地理位置搜索等。
它还支持多核和高性能,可以快速处理大规模的数据。
你可以使用索引创建语句来定义要索引的数据和字段,并使用搜索查询语句来检索匹配的结果。
3. 查询扩展Manticore Search提供了丰富的查询扩展功能,可以帮助你更灵活地构建复杂的搜索查询。
例如,你可以利用词根扩展和近似搜索来处理拼写错误或变体词,或者使用语义扩展来实现更智能的搜索。
此外,还可以使用布尔运算符和范围查询来进一步过滤和筛选结果。
4. 分布式部署Manticore Search还支持分布式部署,可以将数据和查询负载分布到多个节点上。
这种部署方式可以提高搜索性能和容错能力,并支持水平扩展来应对大量的数据和用户请求。
你可以根据需求设置不同的节点角色和复制策略,以实现更高的可靠性和可用性。
5. 安全性和访问权限Manticore Search提供了一套完整的安全性和访问权限机制,可以帮助你保护搜索引擎和数据的安全。
你可以配置用户和角色,并设置细粒度的权限控制,以限制用户的访问范围和操作权限。
全文搜索引擎
目前主流的开源搜索引擎主要有两个,一个是基于Java的Apache Lucene,另一个是基于C++的Sphinx。
在建立索引所需时间方面,Sphinx只需Lucene时间的50%左右,但是索引文件Sphinx比Lucene要大一倍,即Sphinx采用的是空间换时间的策略。
在全文检索速度方面,二者相差不大。
全文检索精确度方面,Lucene要优于Sphinx。
另外,在加入中文分词引擎的难易程度上,Lucene要优于Sphinx。
因此,在一般情况下,选择Lucene作为全文搜索引擎是比较好的选择。
中文分词器IKAnalyzerIKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。
最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。
新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
IKAnalyzer3.0特性:•采用了特有的“正向迭代最细粒度切分算法“,具有50万字/秒的高速处理能力。
•采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
•优化的词典存储,更小的内存占用。
支持用户词典扩展定义•针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。
Nut只为lucene提供分布式搜索框架。
理论上可对千G以上索引文件支持数千万级的用户搜索访问。
Nut由Client、Server、Cache和DB四部分构成。
Client处理用户请求和对搜索结果排序。
Server对请求进行搜索,Server上只放索引,数据存储在DB中,Nut将索引和存储分离。
sphinx全文检索之PHP使用教程
sphinx全文检索之PHP使用教程这是半年前没有对外写的文章,现在拿出来分享下。
可能会有一些不正确或不严谨的地方,某些语言可能比较轻浮,请见谅。
以上一篇的email数据表为例:数据结构:使用打开控制台,必需打开控制台PHP才能连接到sphinx(确保你已经建立好索引源):d:\coreseek\bin\searchd -c d:\coreseek\bin\sphinx.confcoreseek/api目录下提供了PHP的接口文件sphinxapi.php,这个文件包含一个SphinxClient的类在PHP引入这个文件,new一下';$result是一个数组,其中total是匹配到的数据总数量matches是匹配的数据,包含id,attrs这些信息words是搜索关键字的分词你可能奇怪为什么没有邮件的内容这些信息,其实sphinx并不会返回像mysql那样的数据数组,因为sphinx本来就没有记录完整的数据,只记录被分词后的数据。
具体还要看matches数组,matches中的ID就是指配置文件中sql_query SELECT语句中的第一个字段,我们配置文件中是这样的sql_query = SELECT emailid,fromid,toid,subject,content,sendtime,attachement FROM email所以matches中的ID是指emailid至于weight是指匹配的权重,一般权重越高被返回的优先度也最高,匹配权重相关内容请参考官方文档attrs是配置文件中sql_attr_ 中的信息,稍后会提到这些属性的用法说了这么多,即使搜索到结果也不是我们想要的email数据,但事实sphinx是不记录真实数据的,所以要获取到真实email数据还要根据matches中的ID去搜索mysql的email表,但总体来说这样一来一回的速度还是远远比mysql的LIKE快得多,前提是几十万数据量以上,否则用sphinx只会更慢。
DedeCMS V5.7全文检索使用说明
DedeCMS V5.7全文检索使用说明首先了解一下sphinx全文索引的相关知识,考虑到Sphinx全文索引使用的实际需要,主要介绍Sphinx全文索引中文方面的支持。
这里需要感谢李沫南同学对Sphinx全文索引中文支持的贡献!官方网站:/官方文档:/docs/中文支持:/中文使用手册下载:/uploads/pdf/sphinx_doc_zhcn_0.9.pdf中文在线手册:/docs/coreseek_3.2-sphinx_0.9.9.html1.Windows下安装Sphinx1.1.开始前的准备工作先从/products/ft_down/下载Coreseek 3.2.13,这里我们就以Windows环境为例:下载后直接解压coreseek-3.2.13-win32.zip,我们这里假设解压到:D:\coreseek-3.2.13-win32.这里我们需要简单了解几个目录:[D:\coreseek-3.2.13-win32\api]API接口目录,其中包括了php,python,ruby等操作实例,其中test_coreseek.php是一个不错的中文检索的例子.[D:\****\bin]应用程序目录,其中包含以下几个文件* indexer: 用于创建全文索引;* search: 一个简单的命令行(CLI) 的测试程序,用于测试全文索引;* searchd: 一个守护进程,其他软件可以通过这个守护进程进行全文检索;* sphinxapi: 一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, Java).* spelldump: 一个简单的命令行工具,用于从ispell 或MySpell (OpenOffice内置绑定) 格式的字典中提取词条。
当使用wordforms 时可用这些词条对索引进行定制.* indextool: 工具程序,用来转储关于索引的多项调试信息。
Coreseek全文检索服务器2.0(Sphinx0.9.8)参考手册
Coreseek全⽂检索服务器2.0(Sphinx0.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_step 8.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 下发布的⼀个全⽂检索引擎,商业授权(例如, 嵌⼊到其他程序中)需要联系我们(/doc/9ee0e07feefdc8d377ee320a.html )以获得商业授权。