sphinx中文检索引擎coreseek+php+mysql搭建
来源:互联网 发布:画册设计软件 编辑:程序博客网 时间:2024/05/13 13:56
coreseek下载
官网地址:
- Windows参考:http://www.coreseek.cn/products-install/install_on_windows/
- Linux参考:http://www.coreseek.cn/products-install/install_on_bsd_linux/
注:注意根据自己的环境配置选择合适的版本下载
安装
将安装包解压到自己环境的项目目录文件夹下,本例中为 E:\www\coreseek 中,在Windows环境下配置
配置步骤
1)数据(本例中使用mysql作为数据源)
2)建立 sphinx 配置文件
3)生成索引文件
4)启动 sphinx 服务
5)使用(调用api或search.exe程序进行查询)
建立sphinx配置文件
配置文件: etc/csft_mysql.conf
1)数据源定义
#源定义#文章source article{ type = mysql sql_host = 127.0.0.1 sql_user = root sql_pass = 123 sql_db = test sql_port = 3306 sql_query_pre = SET NAMES utf8 sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM np_article #增量id查询 sql_query = SELECT id*100+1 AS id, id AS contentid, title, intro, content, thumb, collect, hit, UNIX_TIMESTAMP(created_at) as created_at FROM article WHERE (deleted_at is null and id <= (SELECT max_doc_id FROM sph_counter WHERE counter_id = 1)) #sql_query第一列id需为整数 #title、content作为字符串/文本字段,被全文索引 sql_attr_uint = contentid #从SQL读取到的值必须为整数,该字段会被保存到查询结果中 sql_attr_uint = collect sql_attr_uint = hit sql_field_string = title #字符串类型字段,将被保存到结果集中 sql_field_string = intro sql_field_string = content sql_field_string = thumb sql_attr_timestamp = created_at #unix时间戳 sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集 #sql_query_info = SELECT * FROM article WHERE id=$id #命令行查询时,从数据库读取原始数据信息}
2)索引配置
#index定义index article{ source = article #对应的source名称 path = E:/www/coreseek/coreseek-4.1-win32/var/data/test/article #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/... docinfo = extern mlock = 0 morphology = none min_word_len = 1 #最小索引词长度。可选选项,默认为1(索引任何词) html_strip = 1 #是否从输入全文数据中去除HTML标记。可选标记,默认为0。已知值包括0(禁用)和1(启用)。 min_infix_len = 1 #索引的最小中缀长度。可选选项,默认为0(不索引中缀)。 infix_fields = title #做中缀索引的字段列表。可选选项,默认为空(所有字段均为中缀索引模式)。 #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/ #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾 charset_dictpath = E:/www/coreseek/coreseek-4.1-win32/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/... charset_type = zh_cn.utf-8}
3)indexer程序配置
#全局index定义indexer{ mem_limit = 128M}
4)服务器定义
#searchd服务定义searchd{ listen = 9312 read_timeout = 5 max_children = 30 max_matches = 1000 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1 pid_file = E:/www/coreseek/coreseek-4.1-win32/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/... log = E:/www/coreseek/coreseek-4.1-win32/var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/... query_log = E:/www/coreseek/coreseek-4.1-win32/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/... binlog_path = #关闭binlog日志 compat_sphinxql_magics = 0}
生成索引
1)生成全部索引
E:\www\coreseek\coreseek-4.1-win32\bin>indexer.exe –config E:\www\coreseek\coreseek-4.1-win32\etc\csft_mysql.conf –all
注: –all 指生成全部索引
2)生成指定索引
E:\www\coreseek\coreseek-4.1-win32\bin>indexer.exe –config E:\www\coreseek\coreseek-4.1-win32\etc\csft_mysql.conf article
注: article 为配置文件中的索引名
索引更新
对于后期插入的新数据更新索引,使用增量索引
参考文档:http://blog.csdn.net/liushuai_andy/article/details/9138455
http://blog.csdn.net/liushuai_andy/article/details/9366777
思路:
1、设置两个数据源和两个索引,一个主索引,一个增量索引,数据库中建立一个计数表,记录已经建完索引的最大ID
2、增量索引,在配置文件中,定义sql 时添加条件,大于表中id值;主索引,在配置文件中,定义sql 时添加条件,小于表中id值
3、每隔几分钟执行增量索引,执行后更新计数表中最大id,合并增量索引和主索引;每隔一天或几天,执行一次主索引
本例操作如下:
1)增量索引源定义
#文章增量索引source article_step:article{ sql_ranged_throttle = 100 sql_query_pre = SET NAMES utf8 sql_query_pre = SET SESSION query_cache_type=OFF sql_query = SELECT id*100+1 AS id, id AS contentid, title, intro, content, thumb, type_id, collect, hit, UNIX_TIMESTAMP(created_at) as created_at FROM article WHERE (deleted_at is null and id > ( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )) sql_attr_uint = contentid #从SQL读取到的值必须为整数 sql_attr_uint = collect sql_attr_uint = hit sql_field_string = title sql_field_string = intro sql_field_string = content sql_field_string = thumb sql_attr_timestamp = created_at sql_query_info_pre = SET NAMES utf8 }
2)增量索引
#文章增量索引index article_step:article{ source = article_step #对应的source名称 path = E:/www/coreseek/coreseek-4.1-win32/var/data/test/article_step}
启动服务
命令行,启动服务,必须打开控制台,php才能连到sphinx,并一直开启具体命令如下:
E:\www\coreseek\coreseek-4.1-win32\bin>searchd.exe –c E:\www\coreseek\coreseek-4.1-win32\etc\csft_mysql.conf
调用查询
1)使用步骤
在php中引入coreseek/api目录下的sphinxapi.php文件,该文件包含一个SphinxClient的类
$sAppPath = app_path();require_once ( $sAppPath.'/extends/sphinx/sphinxapi.php' );$oSphinx = new SphinxClient ();//sphinx 生成索引文件所在服务器域名与端口$oSphinx->SetServer ( '127.0.0.1', '9312');//匹配结果的偏移量,参数分别为:起始位置,返回结果条数,最大匹配条数$oSphinx->SetLimits($iOffset, $iPageSize, $iMaxReturn);//最大搜索时间$oSphinx->SetMaxQueryTime(1000);$sRes = $oSphinx->Query($sKeyWorlds, '*' );//echo '<pre>';//print_r($sRes);//echo '</pre>';
注: $sRes
是一个数组,返回数组结构如下
array (size=8) 'error' => string '' (length=0) 'warning' => string '' (length=0) 'status' => int 0 'fields' => array (size=4) 0 => string 'title' (length=5) 1 => string 'intro' (length=5) 2 => string 'content' (length=7) 3 => string 'thumb' (length=5) 'attrs' => array (size=8) 'contentid' => int 1 'title' => int 7 'intro' => int 7 'content' => int 7 'thumb' => int 7 'collect' => int 1 'hit' => int 1 'created_at' => int 2 'total' => string '0' (length=1) 'total_found' => string '0' (length=1) 'time' => string '0.000' (length=5)
total是匹配到的数据总数量
matches是匹配的数据,包含 id,attr 这些信息
words 是检索关键字的分词
2)类似 mysql 条件的用法
//属性过滤,可过滤的属性必须在配置文件中设置sql_attr_ sql_attr_uint = id //定义int类型属性,该字段会被保存到结果集中sql_attr_timestamp = created_at//定义时间类型属性//如果再次修改这些属性,需要重新生成索引才能生效//指定一些值:第一个参数为指定的字段,第二个参数为该字段的值,第三个参数为true时,表示不包含该值$oSphinx->SetFilter('contentid', array($iId));$oSphinx->SetFilter('contentid', array($iId), true);//指定一个值的范围:第一个参数表判断的字段,第二、三个参数表范围,第四个参数为true时,表示不包含该范围$oSphinx->SetFilterRange('contentid', 1, 10);
3)排序 SPH_SORT_RELEVANCE
模式, 按相关度降序排列(最好的匹配排在最前面)
SPH_SORT_ATTR_DESC
模式, 按属性降序排列 (属性值越大的越是排在前面),需要设置一个属性名
SPH_SORT_ATTR_ASC
模式, 按属性升序排列(属性值越小的越是排在前面),需要设置一个属性名SPH_SORT_TIME_SEGMENTS
模式, 先按时间段(最近一小时/天/周/月)降序,再按相关度降序,需要设置一个属性名
SPH_SORT_EXTENDED
模式, 按一种类似SQL的方式将列组合起来,升序或降序排列。 $oSphinx->SetSortMode ( SPH_SORT_ATTR_DESC, "hit" );
注:内置属性需要加@,可用的内置属性如下
–@id(匹配文档的ID)
–@weight(匹配权值)
–@rank (等同weight)
–@relevance(等同weight)
–@random(随机顺序返回结果)
SPH_SORT_EXPR
模式,按某个算术表达式排序
4)匹配模式 SPH_MATCH_ALL
, 匹配所有查询词(默认模式); SPH_MATCH_ANY
, 匹配查询词中的任意一个; SPH_MATCH_PHRASE
, 将整个查询看作一个词组,要求按顺序完整匹配; SPH_MATCH_BOOLEAN
, 将查询看作一个布尔表达式 SPH_MATCH_EXTENDED
, 将查询看作一个CoreSeek/Sphinx内部查询语言的表达式 . 从版本Coreseek 3/Sphinx 0.9.9开始, 这个选项被选项SPH_MATCH_EXTENDED2
代替,它提供了更多功能和更佳的性能。保留这个选项是为了与遗留的旧代码兼容——这样即使Sphinx及其组件包括API升级的时候,旧的应用程序代码还能够继续工作。 SPH_MATCH_EXTENDED2
, 使用第二版的“扩展匹配模式”对查询进行匹配. SPH_MATCH_FULLSCAN
, 强制使用下文所述的“完整扫描”模式来对查询进行匹配。注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用,但任何文本匹配都不会发生.
我们要关注的主要是SPH_MATCH_EXTENDED2
扩展匹配模式,扩展匹配模式允许使用一些像mysql的条件语句 $oSphinx->SetMatchMode ( SPH_MATCH_ANY);//模糊匹配
$oSphinx->SetMatchMode ( SPH_MATCH_ALL);//精确匹配
检索返回字段问题
需要返回文本字段,可以在配置文件中定义:
sql_field_string =title
sql_field_string =content
注:sql_attr_string
与sql_field_string
的区别 sql_attr_string
字符串属性(可返回原始文本信息) sql_field_string
字符串字段(可全文检索,可返回原始文本信息)
- sphinx中文检索引擎coreseek+php+mysql搭建
- Coreseek + Sphinx + Mysql + PHP构建中文检索引擎
- Linux下PHP+MySQL+CoreSeek中文检索引擎配置
- Coreseek开源中文检索引擎-Sphinx中文版
- sphinx中文版Coreseek中文检索引擎安装和使用方法(Linux)
- Coreseek中文检索引擎
- (Linux)sphinx检索Coreseek中文全文检索引擎安装和使用
- Linux下PHP+MySQL+CoreSeek中文检索引擎配置(转)
- php+coreseek/sphinx之中文全文搜索平台搭建
- sphinx支持中文检索(安装coreseek)
- sphinx支持中文检索(安装coreseek)
- Sphinx全文检索引擎和Coreseek全文检索服务器简介
- 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)
- coreseek(sphinx)全文检索
- Sphinx和Coreseek:强大的开源全文检索引擎
- Sphinx和Coreseek:强大的开源全文检索引擎
- Sphinx和Coreseek:强大的开源全文检索引擎
- windows下全文检索引擎sphinx/coreseek的安装配置
- 用do-while语句编程实现累加功能
- spring 在web.xml 里面如何使用多个xml配置文件
- C#创建List存放匿名对象、遍历List、泛值取值
- 微信小程序 —— 上传文件到服务器(例:上传图片到服务器)
- li元素按中文首字母排序
- sphinx中文检索引擎coreseek+php+mysql搭建
- java super()与this()问题
- angularjs 猜大小
- Lintcode67 Binary Tree Inorder Traversal solution 题解
- 发个模板引擎
- linux 系统cpu查看
- Spring Quartz 和 Spring Task使用比较
- mysql 操作
- 权限