sphinx全文搜索引擎简单使用(Windows)

当一个功能需要对表中的text varchar等文本进行like查询时,MySQL全表扫描很慢,需要sphinx

1.解决性能问题

2.解决中文分词问题

流程:

1.PHP先把要搜索的短语发给sphinx服务器,sphinx服务器返回的是记录的ID

2.PHP用sphinx返回的ID查询数据库

用法一:sphinxse:把sphinx集成到MSQL里去,没有单独的sphinx服务器

PHP只需要写一个sql语句即可,不用用户管sphinx,mysql会自己连接查询sphinx。如果要使用这种,需要在linux下重新编译mysql,把sphinx当成插件编译到mysql中去。

实际操作:

1.先下载sphinx的包,我们下载的是coreseek【coreseek.cn

2:coreseek是一个加了中文的sphinx

3:下载包之后几个重要文件说明

实际应用:将etc文件夹下的csft_mysql.conf,即先复制mysql的配置文件模板到根目录下,并改名为sphinx.conf

以下sql语句要学习下写的不错

配置文件配置好之后就可以使用这个文件生成索引了

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/

#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库

#源定义

#配置数据源(要生成索引的数据)

#说明:一个配置文件中可以定义多个数据源

source goods

{

type= mysql

sql_host= localhost

sql_user= rumble

sql_pass= lumingzhe

sql_db= ushopdata

sql_port= 3306

#sphinx在取数据之前执行的sql语句一般是设置编码的语句set names编码

sql_query_pre= SET NAMES utf8

#一个数据源中只能有一个主查询,这条语句取出的数据就是sphin将要创建全文索引的语句

#主查询的要求:第一个字段必须是ID,如果名字不为ID,取个别名叫id(类型必须是非零唯一、不重复的整数)

#sphinx只能对属性字段排序,sphinx要排序的字段必须取出该字段,sphin排序必须将某个字段定义成一个属性

sql_query= SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title,content FROM documents

#sql_query第一列id需为整数

#后面这些可以不用

#title、content作为字符串/文本字段,被全文索引

#以下是用来定义属性:用来排序的sql_attr_uint可以定义多个比如我要对价格上架时间

#进行排序可以这样操作sql_attr_uint=shop_pricesql_attr_uint=add_time

sql_attr_uint= group_id#从SQL读取到的值必须为整数

sql_attr_timestamp=date_added #从SQL读取到的值必须为整数,作为时间属性

sql_query_info_pre= SETNAMES utf8#命令行查询时,设置正确的字符集

sql_query_info= SELECT* FROM documents WHERE id=$id #命令行查询时,从数据库读取原始数据信息

}

#index定义

#配置索引--》生成的索引文件

#说明:一个数据源对应一个索引的配置

index goods_index

{

source=goods#对应的source名称

#sphinx生成的索引文件存放的目录

#注意:path中的地址的最后一个即data后面的goods是说:索引文件名叫goods

#并不是说goods目录

path= D:\D_E\coreseek-4.1-win32\var\data\goods

#var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

docinfo= extern

mlock= 0

morphology= none

#允许最短的词

min_word_len= 1

html_strip= 0

#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/

#charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾

#中文词库在哪中文词库所在的目录

charset_dictpath =D:\D_E\coreseek-4.1-win32\etc

#Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...

charset_type= zh_cn.utf-8

}

#全局index定义

#目前sphin只支持utf8编码

#允许使用多大的内存创建索引文件(indexer.exe这个命令可以使用的内存)

indexer

{

mem_limit= 128M

}

#searchd服务定义

searchd

{

listen=9312

read_timeout= 5

max_children= 30

#最大返回的记录数(即使查询出的记录数量更多也只返回设置的数)

max_matches= 1000

seamless_rotate= 0

preopen_indexes= 0

unlink_old= 1

#以下三个一定要配置,不配置无法用

pid_file =D:\D_E\coreseek-4.1-win32\var\log\searchd_mysql.pid

#var/log/searchd_mysql.pid

log =D:\D_E\coreseek-4.1-win32\var\log\searchd_mysql.log

#var/log/searchd_mysql.log

query_log =D:\D_E\coreseek-4.1-win32\var\log\query_mysql.log

#var/log/query_mysql.log

#请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

binlog_path =#关闭binlog日志

}


说明:indexer.exe命令所在地址–c配置文件所在地址指定生成索引的数据源【比如goods】或者–all【即为所有的数据源生成索引】

4:启动sphinx服务器

补充:sphinx服务删除

引入sphinx的api的php操作的包这下就可以对中文进行全文索引了

Sphinx自动更新

实际操作:

1:每次生成索引文件之后要把最后一条记录的ID保存下来,下次ID大于这个ID的就是最新的数据。

2:建一张表用来保存这个id

3:

4:配置sphinx让每次生成索引之后能够直接把最大的ID更新进来

定期为新添加的数据生成索引

A:修改sphinx定义一个新的数据源(新插入的数据还没有创建索引)

B:再添加一个index索引(每个数据源对应一个索引文件)

C:写一个bat脚本,让这个定期用新的数据源生成索引文件,并把这个索引文件合并到主索引文件上(第一次生成的索引文件)

D:配置Windows系统让系统定期执行这个bat脚本即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容