您的位置:首页 > 编程语言 > PHP开发

PHP使用Sphinx全文检索技术

2020-07-27 19:34 176 查看

一、sphinx的基本介绍

1、使用背景

当对大文本数据进行单词匹配查询时,如:有一个歌曲网站,数据库中

收集着上百万首歌曲的信息,如果要查询出歌词中带“爱情”的所有歌

曲,典型的做法是执行如下SQL语句:

SELECT * FROM songs WHERE content LIKE "%爱情%"。

但是在MYSQL中以%开头的查询无法使用索引,所以这条SQL语句将执

行全表扫描,性能极差。MyISAM引擎中的全文索引是专门对文本创建

索引的,但对中文的支持不好。

好的解决方案:使用sphinx !

 

2、sphinx的原理

第一步:对应数据源建立索引

中文分词技术,

今天 1

下雨 1

明天 1,2,3

学习 2

第二步:执行查询,返回查询到单词所在,mysql里面记录的id

php要把查询的单词给sphinx软件,软件拿到要查询的单词后,从索引里面进行匹配。返回该单词在mysql表里面记录的id

php拿到单词所在的额id后,根据该id去mysql里面查找数据。

3、什么是Coreseek

Coreseek 是一款中文全文检索/搜索软件,基于Sphinx研发并独立发布,

专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索

数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景

二、开始安装执行

1、下载软件,解压后,拷贝到指定的目录

2、建立一个sphinx的配置文件

3、建立索引

配置数据源 配置索引 配置服务器端的信息。

(1)配置数据源,

语法:source 数据源的名字

在一个配置文件中,可以配置多个数据源的。

(2)针对数据源配置索引,

一个数据源对应一个索引的配置,

 

语法:index 索引的名字

总结:

(1)针对数据源建立索引,要配置的是数据源,数据源对应的索引,服务器端配置

使用indexer命令完成索引的创建。

(2)启动sphinx的服务进行查询

三、使用php查询测试

1、要拷贝sphinx的接口文件到php项目中来

四、查询的关键词要添加样式显示

 

使用:$sc->buildExcerpts()来完成对应关键词添加样式来显示

 

$sc->buildExcerpts(一条记录的数组,索引的名字,查询的关键词,关键词添加的样式)

 

$sc->buildExcerpts(一条记录的数组,索引的名字,查询的关键词,array(

‘before_match’=>’<font color=”red”/>’,

‘after_match’=>’</font>’

 

))

该函数返回的是一个索引的数组,因此在输出时要使用下标来显示

五、SPHINX的匹配模型

1、SPH_MATCH_ALL 完全匹配所有的词

如“冬天 的 雪”,并不会匹配 “我爱冬天”,

但可以匹配 “我的朋友,爱冬天,和雪”。

因为“冬天的雪” 被分成 “冬天”,“的”,“雪”三个词,匹配条件是同时包含

这三个词,“我爱冬天”里只包含一个“冬天”

2、SPH_MATCH_ANY: 匹配任意一个词

如“冬天 的 雪”,并会匹配 “我爱冬天”。

"冬天的雪“ -》 ”冬天“ ”的“ ”雪“

因为“我爱冬天”里有一个“冬天”相匹配。

六、增量索引建立

原来有1000万条记录,建立完成索引了,

后来又添加了500条记录,

思路:把后面添加的记录单独建立索引,建立的增量索引再合并到主索引上面。

具体实时:

(1)新建一张表,用于记录电影最大的id,当主索引建完之后,表里面就记录最大的id,

(2)建立增量索引是主查询,就使用条件了。

select id,title,description from dede_archives where id>(select max_id from a)

2020年7月28日 19:33:50

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: