博客列表 >Sphinx--window操作笔记

Sphinx--window操作笔记

一个人流浪
一个人流浪原创
2017年12月18日 20:25:041122浏览

一、sphinx的基本介绍

引入:

图片3.png图片4.png

 

 

解决方式: 使用sphinx来实现  英文的搜索问题(大文本)

1、使用背景

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

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

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

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

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

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

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

好的解决方案:使用sphinx !

 

传统上的sphinx技术

 

 英文:1  today is monday ,the wearther is ranning;

       2  tomorrow  is  tuesday ,the wearther is  sunning;

 

  把整个文档按照空格进行分词,去掉一些修饰词(停词 比如 a is the 等),形成以下词组:   

       today  monday  weather  ranning   tomorrow  sunning

  把上面的单词进行创建索引

      关键字        所在的ID(主键且不为空)

  1    today          1

  2    monday        1

  3    weather        1,2

  4     ranning         1

  5    sunning         2

 

中文:  今天是星期一,天气下雨

        明天是星期二,天气晴

   中文没法进行分词

 

说明:sphinx分词技术只针对中文,不支持英文。

      今天所讲的sphinx并不是真正意义上的sphinx,而是结合中文的分词技术加上mmseg中文分词形成的一个叫做coreseek的软件技术来实现

 

2、sphinx(coreseek)的原理

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

 QQ截图20171218204211.png

中文分词技术,去掉停词(如 是、的、这个等)

今天             1

下雨             1

明天             1,2,3

学习             2

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

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

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

 

3、什么是Coreseek

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

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

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

 图片5.png图片6.png图片7.png图片8.png

 

 

二、开始安装执行

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

  下载 http://www.coreseek.com/ 地址

  图片9.png图片11.png图片11.png图片12.png

 

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

 图片13.png

3、建立索引

分为三步走:

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

(1)配置数据源(固定的某个表的数据)

语法:source   数据源的名字

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

   图片14.png图片15.png

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

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

   图片16.png

(3)配置sphinx服务器端信息。

  图片17.png

4、根据sphinx.conf的配置,创建索引

 以管理员进入cmd 进入到sphinx/bin目录

语法

indexer  -c 配置文件    索引的名字

 图片18.png

 图片19.png

5、安装sphinx(coreseek)启动服务,

以管理员进入cmd进入到sphinx/bin目录,使用searchd.exe命令

语法:searchd  -c 配置文件  --install

 图片20.png

启动服务

默认的端口号是9312,

 图片21.png

 

总结:

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

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

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

(3)带上配置文件

三、使用php查询测试

  图片22.png图片23.png

 

四、SPHINX的匹配模型

1、SPH_MATCH_ALL 完全匹配所有的词(默认使用)

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

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

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

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

2、SPH_MATCH_ANY: 匹配任意一个词

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

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

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

3、

 图片24.png

4、

图片25.png

5、

 图片26.png

六、增量索引建立

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

后来又添加了500条记录,

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

具体实施:

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

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

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

 图片27.png

步骤:

(1)新建一张表

create table a(max_id int);

 图片28.png

(2)修改主数据源

 图片29.png

(3)添加增量数据源

 图片30.png

(4)配置增量索引

 图片31.png

 

(5)重新建立主索引

  图片32.png

添加数据,进行建立增量索引

 图片33.png

图片34.png

(6)把增量索引合并到主索引上面

indexer  -c配置文件  --merge  主索引的名字  增量索引的名字  --rotate(不关闭服务强制合并)

 图片35.png

说明:以后有数据更新,只需要做以下步骤即可

 图片36.png

检测结果:之前的数据和后面添加的数据都使用到了sphinx全文检索

 图片37.png


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议