项目dedecms二次开发-sphinx_第1页
项目dedecms二次开发-sphinx_第2页
项目dedecms二次开发-sphinx_第3页
项目dedecms二次开发-sphinx_第4页
项目dedecms二次开发-sphinx_第5页
免费预览已结束,剩余33页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

传智播客教育sphinx讲师::为什么要用sphinx?当对大文本数据进行单词匹配查询时,一个歌曲,数据库中收集着上百万首歌曲的信息,如果要查询出歌词中带“冬天”的所有歌曲,典型的做法是执行如下SQL语句:SELECT

*

FROM

songs

WHERE

content

LIKE"%php%"。但是在MYSQL中以%开头的查询无法使用索引,所以这条SQL语句将执行全表扫描,性能极差。MyISAM引擎中的全文索引是专门对文本创建索引的,但对中文的支持不好。好的解决方案:使用sphinx

!Sphinx

?Sphinx是一个独立的全文索引引擎,意图为其他应用提供高速、低空间占用、搜索结果高相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和

语言集成。内置MySQL和PostgreSQL数据库数据源的支持。搜索API支持PHP、Python、Perl、Rudy和Java。sphinx

的特性高速的建立索引(可达10M/秒)高性能的搜索(平均检索时间小于0.1秒)可处理海量数据提供了优秀的相关度算法支持分布式搜索提供

生成功能可作为MYSQL

引擎提供搜索服务支持布尔、短语、词语相似度等多种检索模式单个文档支持多个全文检索字段(最大不超过32个)支持额外的属性信息支持单一字节编码和UTF-8编码原生支持MYSQL、PostgreSQL数据库sphinx

的特性Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含

10万条记录的增量索引,重建一次只需几十秒。sphinx

支持的操作系统Linux

2.4.x,

2.6.x

(包括各种

版)Windows

2000,

XPFreeBSD

4.x,

5.x,

6.xNetBSD

1.6,

3.0Solaris

9,

11Mac

OS

XSphinx的Windows版可用于测试和调试,但不建议用于生产系统。最突出的两个问题是:缺少并发查询的支持;缺少索引数据热切换的支持。coreseek

?Coreseek是一款中文全文检索/搜索

,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、

/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景使用PHP客户端查询

Sphinx

的基本原理与检索流程如何获得sphinx从官网,支持中文分词的可以:从

http:

Sphinx

的压缩包中包含以下indexer

:用来创建索引search

:一个命令行的测试程序searchd:

服务器端一些客户端api

库,包含php,python,perl,ruby等。sphinx

的配置文件:sphinx.confSphinx

中的基本概念数据源索引的数据可以来自不同的来源:SQL数据库、纯文本、HTML文本、邮件等。限制:每一个文档必须有一个ID,并且类型必须为唯一的、非零非负的整数。定义数据源sphinx.conf

配置文件中定义数据源source

名字

{...}index

索引

{...}在配置文件中可以定义多个数据源,每个数据源都有一个index项对应。对应方法:在定义index时有一项source

指定使用的数据源,如:source

songs{...}index

songsindex{source

=

songs}如何写配置文件sphinx.conf

配置文件中需要定义以下内容source{}定义数据源,可以定义多个,每一个数据源对应一个indexindex{}定义索引,每个索引对应一个数据源indexer{}配置indexer进程,只能有一个searchd{}配置searchd服务器进程,只能有一个定义数据源定义数据源为songs表中的title,author,content字段source

mysql{typesql_hostsql_usersql_passsql_dbsql_portsql_query_presql_query=

mysql=

localhost=

root==

test=

3306=

SET

NAMES

utf8=

SELECT

id,title,author,content

FROM

songs}sql_query_pre:预查询SQL语句,通常用来设置编码sql_query:主查询,其中第一个字段必须是id并且类型为非负、非空、唯一的整数Sphinx

中的基本概念分区查询通常sphinx在建索引时,是通过主查询把数据

读到内存操作,但这可能导致在这个过程中整个表被锁定阻塞其他连接的操作,同时,会占用大量的内存。分区查询可以把数据分成若干份,分批处理。配置如下:sphinx.conf

文件中先取得最大值和最小值sql_query_range

=

SELECT

MIN(id),MAX(id)

FROM设置每次

的记录数sql_range_step

=

10003.设置主查询sql_query

=

SELECT

id,title

FROMWHERE

id

>=

$start

AND

id

<=

$end定义索引每个数据源对应一个索引index

mysql{sourcepathdocinfo=mysql

-->对应数据源的名字=D:/coreseek/tt/mysql

--》索引存放路径=extern

--》属性信息存放位置charset_dictpath

=D:/coreseek/etc/

-->分词库charset_type

=

.utf-8

-->编码只支持utf8和sbcs(单字节)}配置indexer程序indexer{mem_limitmax_iopsmax_iosize}=128M

-->建索引时使用的内存量=0

-->每秒最大i/o操作次数,0为=

0

-->

最大允许的i/o操作大小,0

,单位字节配置服务器端searchd{listenread_timeoutmax_childrenmax_matchesseamless_rotatepreopen_indexesunlink_old=9312

--》端=5

--》查询超时时间=30

--》并发搜索数,0为不限制=1000

-->最多匹配的记录数=0

-->是否启动无缝切换索引=0

--》是否在服务器启动时,打开所有索引=1--》索引切换后是否删除旧的索引文件log =

D:/coreseek/tt/searchd_mysql.logquery_log =

D:/coreseek/tt/query_mysql.log}sphinx

创建索引indexer

创建索引indexer-c

配置文件索引名称(--all代表所有索引)如:根据配置文件创建所有索引indexer

-c

C:/sphinx.conf

--all根据配置文件创建叫做song的索引indexer

-c

C:/sphinx.con

gsSphinx

创建索引SQL数据源创建索引的流程连接到数据库执行预查询

(sql_query_pre

,通常用来设置编码)执行主查询(sql_query,主要用来取要建索引的数据)执行后查询

(sql_query_post)关闭到数据库的连接对数据分词、排序创建索引文件再次建立到数据库的连接执行后索引查询

(sql_query_post_index)再次关闭到数据库的连接使用

search

进试search

:

s

中对索引进search-c

配置文件查询的词试如:search-c

D:/sphinx.conf

冬天sphinx

开启服务器searchd开启服务端searchd-c

配置文件索引名称服务器端默认

9312

端口。常用命令:-c:指定配置文件路径--stop:停止当前服务--status

:查看当前状态--install:安装为

windows

服务--delete:删除windows服务--port

port:

的端口--index indexName:只查询某个索引,默认查询所有索引使用PHP

API操作

Sphinx使用php

api在sphinx的解压

下有个apiphp,python,perl,java等sphinxapi.php

到<?phprequire('sphinxapi.php');$sc

=

new

SphinxClient();里面包含了客户端的API,包括下,代码示例://包含PHP驱动文件//生成客户端//设置服务器$sc->setServer('localhost',

9312);$res=$sc->query('

','mysql2');

//在mysql2索引中查询匹配模式SPH_MATCH_ALL

:匹配所有查询词(默认)SPH_MATCH_ANY:匹配查询词中的任意一个。SPH_MATCH_PHRASE:将整个查询词看做一个词组,要完全匹配SPH_MATCH_BOOLEAN:将查询看作一个布尔表达式SPH_MATCH_EXTENDED:查询看做一个sphinx的表达式PHP中通过setMat

ode函数来设置,如:<?php$sc

=

new

SphinxClient();$sc->setMat

ode(SPH_MATCH_ANY);布尔查询SPH_MATCH_ALL

完全匹配所有的词如“冬天的但可以匹配“雪”,并不会匹配“我爱冬天”,朋友,爱冬天,和雪”。因为“冬天的雪”被分成“冬天”,“的”,“雪”三个词,匹配条件是同时包含这三个词,“我爱冬天”里只包含一个“冬天”布尔查询SPH_MATCH_ANY:匹配任意一个词如“冬天

雪”,并会匹配

“我爱冬天”。"冬天的雪“-》”冬天“”的“”雪“因为“我爱冬天”里有一个“冬天”相匹配。布尔查询SPH_MATCH_PHRASE:必须匹配整个短语如“冬天的雪”,不会匹配

朋友,爱冬天,和雪”,虽然都包含同样的需要严格匹配不再健忘,只匹配“冬天的雪”布尔查询SPH_MATCH_EXTENDED:

支持一些扩展的语法支持@字段查询如,查询title包含

abc,content

包含

bcd的:'@title

abc

@content

bcd'布尔查询SPH_MATCH_BOOLEAN

与,或,组&,or,!,()查询“如:

o

|world”,或“冬天”,:<?php$sc

=

new

SphinxClient();$res=$sc->query("

|冬天");常用API。buildExcerpts:创建文档close:关闭连接query:执行查询getLastError:返回上一条错误信息open:建立到服务器端的持久连接setArrayResult:设置返回结果格式setLimits:设置返回结果数量与偏移setMat odel:设置查询模式updateAttributes:更新文档属性setGroupBy

:设置分组属性setFilter

:设置过滤器API查看:为查询结果生成buildExcerpts

(

array

$docs

,

string

$index

,

string

$words

[,

array$opts

]

)Sphinx

中的基本概念索引合并indexer--merge

desc src[--rotate]例。把delta

索引合并到main

索引上indexer--merge

main

delta--rotate--rotate项是可选的,如果searchd服务器已经启动,则必须要加。Sphinx

中的基本概念属性属性是附加在每个文档上的额外的信息。可以在搜索时用于过滤和排序。如:把搜索出来的数据根据时间属性排序。属性支持的类型:无符号整数UNIX时间戳浮点值字符串(

sql_attr_uint)(

sql_attr_timestamp

)(

sql_attr_float

)( sql_attr_str2ordinal

)多值属性

MVA (

sql_attr_multi

)实时索引更新有这么一种常见的情况:整个数据集非常大,以至于难于经常性的重建索引,但是每次新增的记录却相当地少。一个典型的例子是:一个

有1000000个已经归档的帖子,但每天只有1000个新帖子。如果为这1000条记录重建所有索引将花费很长时间。解决的办法是:“主索引+增量索引”模式来实现“近实时”的索引更新。实现思路:把数据分成两部分分别索引建立初始数据主索引定期创建增量部分的索引,并把增量的索引合并到主索引上。主索引

+增量索引的实现第一步:创建一张表用来记录已经索引的记录条数create

table

a{id

int

unsigned

not

null,max_id

int

unsigned

not

null

default

'0',primary

key

(id)}主索

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论