- 浏览: 2556067 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
Sphin
x 速成指南
(CGFinal.com原创,本文原文见http://dev.cgfinal.com/sphinx/sphinx.html
)
版权 ? 2008 Dony,<tappony(at)gmail.com>,版权所有,转载请声明来源与作者
2008-01-17
目录
1. Sphin
x简介
1.1. 什么是全文检索
1.2. 介绍
1.3. Sphin
x的特性
2. Sphin
x安装(For MySQL
)
2.1. Windows下安装
2.2. Linux
下安装 3. 实例说明
4. Sphin
x配置
5. 运行Sphin
x
6. 搜索(翻译)
6.1. 匹配模式
6.2. 布尔查询语法(Boolean query syntax)
6.3. 扩展查询语法(Extended query syntax)
6.4. 权重(匹配度,Weight)
7. 如何调用Sphin
x
8. Sphin
xSE的SQL查询例子演练
9. 如何自动重建索引
10. 相关资源
1. Sphin
x简介
1.1. 什么是全文检索
全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术
。检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。
1.2. 介绍
Sphin
x是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能
,使得应用程序更容易实现专业化的全文检索。Sphin
x特别为一些脚本语言设计搜索API接口
,如PHP
,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
1.3. Sphin
x的特性
高速索引 (在新款CPU上,近10 MB/秒);
高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);
高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
提供良好的相关性排名
支持分布式搜索;
提供文档摘要生成;
提供从MySQL内部的插件式存储引擎上搜索
supports boolean, phrase, and word proximity queries;
支持每个文档多个全文检索域(默认最大32个);
支持每个文档多属性;
支持断词;
支持单字节编码与UTF-8编码;
supports English stemming, Russian stemming, and Soundex for morphology;
支持MySQ(MyISAM和InnoDB 表都支持);
支持PostgreSQL.2. Sphin
x安装(For MySQL) 2.1. Windows下安装 从http://dev.mysql
.com/
上下载
MySQL5.0.45版安装配置好MySQL,采用utf-8字符
集
从Sphin
x官网上http://www.sphinxsearch.com/downloads.html
下载mysql-5.0.45-sphinxse-r871-win32.zip和sphinx-0.9.8-svn-r985-win32.zip
如果您的MySQL服务已启动请先停止掉
解压mysql-5.0.45-sphinxse-r871-win32.zip,将里面bin与share目录覆盖掉你的mysql安装目录下的相应目录
解压sphinx-0.9.8-svn-r985-win32.zip ,将里面的文件解压到D:\sphinx
sphinx的配置与实际应用是相关的,因此以下我以例子进行说明,至此sphinx安装部分结束
2.2. Linux下安装 下载mysql-5.1.22-rc.tar.gz解压至/root/mysql-5.1.22
下载sphinx-0.9.8-svn-r985.tar.gz,解压至/root/sphinx-0.9.8-svn-r985
将/root/sphinx-0.9.8-svn-r985/mysqlse下的文件复制至/root/mysql-5.1.22/storage/sphinx
在/root/mysql-5.1.22目录下运行
sh BUILD/autorun.sh
./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all \
--enable-thread-safe-client --enable-assembler --with-readline --with-big-tables --with-plugins=sphinx
make && make install
groupadd mysql
useradd –g mysql mysql
chown mysql:mysql /usr/local/mysql -R
cd /usr/local/mysql
bin/mysql_install_db –user=mysql
(此时系统可能会提示:
[Warning] Storage engine 'SPHINX' has conflicting typecode. Assigning value 42.可忽略,不影响使用)
cp /root/mysql-5.1.22/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
cp /root/mysql-5.1.22/support-files/my-medium.cnf /etc/my.cnf
/etc/init.d/mysql start
(至些mysql启动了)然后进入mysql命令行,运行show engines,看是不是有一个叫sphinx的engine,有的话就表示sphinxSE(mysql的sphinx引擎)安装正常了
进入/root/sphinx-0.9.8-svn-r985,运行
ldconfig /usr/local/mysql/lib/mysql
ldconfig /usr/local/mysql/include/mysql
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
make && make install3. 实例说明
为更好说明如何应用Sphin
x,现结合实例说明,我们以网站的新闻文章表为例。我们想要对新闻文章表进行全文检索(主要是标题与内容),新闻文章表的相关信息如下:
CREATE TABLE `eht_articles` (
`ARTICLESID` int(11) NOT NULL auto_increment,
`TITLE` varchar(100) NOT NULL default '',
`TITLECOLOR` varchar(20) default NULL,
`AUTHOR` varchar(200) default NULL,
`COMEFROM` varchar(200) default NULL,
`KEYWORD` varchar(200) default NULL,
`HTMLURL` varchar(200) default NULL,
`CATALOGID` int(6) default NULL,
`CONTENTS` mediumtext,
`EDITUSERID` int(6) default NULL,
`ADDTIME` int(10) default NULL,
`UPDATETIME` int(10) default NULL,
`HITS` int(6) default NULL,
PRIMARY KEY (`ARTICLESID`)
) ENGINE=MyISAM DEFAULT
CHARSET=utf8;在这个表中,我主要想对标题(TITLE)与内容(CONTENTS)字段进行全文检索,在检索过程中可能我会根据文章的栏目
(CATALOGID),编辑(EDITUSERID),时间段(ADDTIME)进行条件性的全文检索,然后可能会根据主键
ID(ARTICLESID),人气(HITS)进行排序显示,如何配置Sphin
x来实现呢?
4. Sphin
x配置
sphinx是以sphinx.conf为配置文件,索引与搜索均以这个文件为依据进行,要进行全文检索,首先就要配置好sphinx.conf,告诉sphinx哪些字段需要进行索引,哪些字段需要在where,orderby,groupby中用到。
安装完Sphin
x后,在D:/sphinx目录有一个sphinx.conf.in,这个相当于sphinx的配置例子文件,我们以这个文件为蓝本,重新创建一个空白内容的sphinx.conf,存放在d:/sphinx根目录。
sphinx.conf的内容组成
source 源名称1{
…
}
index 索引名称1{
source=源名称1
…
}
source 源名称2{
…
}
index 索引名称2{
source = 源名称2
…
}
indexer{
…
}
searchd{
…
}提示
从组成我们可以发现sphinx可以定义多个索引与数据源,不同的索引与数据源可以应用到不同表或不同应用的全文检索。
根据前面的实例,我们配置出我们需要的sphinx.conf,如下:
source cgfinal
{
type = mysql
strip_html = 0
index_html_attrs =
sql_host = localhost
sql_user = root
sql_pass = admin
sql_db = test
sql_port= 3306 # optional, default is 3306
sql_query_pre= SET NAMES utf8
sql_query = SELECT ARTICLESID,TITLE,CONTENTS,AUTHOR,CATALOGID,ADDTIME,EDITUSERID,\
HITS FROM a.eht_news_articles
#sql_query = SELECT * FROM a.eht_news_articles
sql_attr_uint= CATALOGID
sql_attr_uint= EDITUSERID
sql_attr_uint = HITS
sql_attr_timestamp = ADDTIME
sql_query_post =
sql_ranged_throttle= 0
#sql_query_info = SELECT * FROM a.eht_news_articles WHERE ARTICLESID=$id
}
index cgfinal
{
source = cgfinal
path = d:/sphinx/data/cgfinal
docinfo = extern
mlock = 0
morphology = none
stopwords =
min_word_len = 1
charset_type = utf-8
charset_table = U+FF10..U+FF19->0..9, 0..9, U+FF41..U+FF5A->a..z, U+FF21..U+FF3A->a..z,\
A..Z->a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6->U+00E0..U+00F6,\
U+00E0..U+00F6, U+00D8..U+00DE->U+00F8..U+00FE, U+00F8..U+00FE, U+0100->U+0101, U+0101,\
U+0102->U+0103, U+0103, U+0104->U+0105, U+0105, U+0106->U+0107, U+0107, U+0108->U+0109,\
U+0109, U+010A->U+010B, U+010B, U+010C->U+010D, U+010D, U+010E->U+010F, U+010F,\
U+0110->U+0111, U+0111, U+0112->U+0113, U+0113, U+0114->U+0115, U+0115, \
U+0116->U+0117,U+0117, U+0118->U+0119, U+0119, U+011A->U+011B, U+011B, U+011C->U+011D,\
U+011D,U+011E->U+011F, U+011F, U+0130->U+0131, U+0131, U+0132->U+0133, U+0133, \
U+0134->U+0135,U+0135, U+0136->U+0137, U+0137, U+0139->U+013A, U+013A, U+013B->U+013C, \
U+013C,U+013D->U+013E, U+013E, U+013F->U+0140, U+0140, U+0141->U+0142, U+0142, \
U+0143->U+0144,U+0144, U+0145->U+0146, U+0146, U+0147->U+0148, U+0148, U+014A->U+014B, \
U+014B,U+014C->U+014D, U+014D, U+014E->U+014F, U+014F, U+0150->U+0151, U+0151, \
U+0152->U+0153,U+0153, U+0154->U+0155, U+0155, U+0156->U+0157, U+0157, U+0158->U+0159,\
U+0159,U+015A->U+015B, U+015B, U+015C->U+015D, U+015D, U+015E->U+015F, U+015F, \
U+0160->U+0161,U+0161, U+0162->U+0163, U+0163, U+0164->U+0165, U+0165, U+0166->U+0167, \
U+0167,U+0168->U+0169, U+0169, U+016A->U+016B, U+016B, U+016C->U+016D, U+016D, \
U+016E->U+016F,U+016F, U+0170->U+0171, U+0171, U+0172->U+0173, U+0173, U+0174->U+0175,\
U+0175,U+0176->U+0177, U+0177, U+0178->U+00FF, U+00FF, U+0179->U+017A, U+017A, \
U+017B->U+017C,U+017C, U+017D->U+017E, U+017E, U+0410..U+042F->U+0430..U+044F, \
U+0430..U+044F,U+05D0..U+05EA, U+0531..U+0556->U+0561..U+0586, U+0561..U+0587, \
U+0621..U+063A, U+01B9,U+01BF, U+0640..U+064A, U+0660..U+0669, U+066E, U+066F, \
U+0671..U+06D3, U+06F0..U+06FF,U+0904..U+0939, U+0958..U+095F, U+0960..U+0963, \
U+0966..U+096F, U+097B..U+097F,U+0985..U+09B9, U+09CE, U+09DC..U+09E3, U+09E6..U+09EF, \
U+0A05..U+0A39, U+0A59..U+0A5E,U+0A66..U+0A6F, U+0A85..U+0AB9, U+0AE0..U+0AE3, \
U+0AE6..U+0AEF, U+0B05..U+0B39,U+0B5C..U+0B61, U+0B66..U+0B6F, U+0B71, U+0B85..U+0BB9, \
U+0BE6..U+0BF2, U+0C05..U+0C39,U+0C66..U+0C6F, U+0C85..U+0CB9, U+0CDE..U+0CE3, \
U+0CE6..U+0CEF, U+0D05..U+0D39, U+0D60,U+0D61, U+0D66..U+0D6F, U+0D85..U+0DC6, \
U+1900..U+1938, U+1946..U+194F, U+A800..U+A805,U+A807..U+A822, U+0386->U+03B1, \
U+03AC->U+03B1, U+0388->U+03B5, U+03AD->U+03B5,U+0389->U+03B7, U+03AE->U+03B7, \
U+038A->U+03B9, U+0390->U+03B9, U+03AA->U+03B9,U+03AF->U+03B9, U+03CA->U+03B9, \
U+038C->U+03BF, U+03CC->U+03BF, U+038E->U+03C5,U+03AB->U+03C5, U+03B0->U+03C5, \
U+03CB->U+03C5, U+03CD->U+03C5, U+038F->U+03C9,U+03CE->U+03C9, U+03C2->U+03C3, \
U+0391..U+03A1->U+03B1..U+03C1,U+03A3..U+03A9->U+03C3..U+03C9, U+03B1..U+03C1, \
U+03C3..U+03C9, U+0E01..U+0E2E,U+0E30..U+0E3A, U+0E40..U+0E45, U+0E47, U+0E50..U+0E59, \
U+A000..U+A48F, U+4E00..U+9FBF,U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF, \
U+2F800..U+2FA1F, U+2E80..U+2EFF,U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF, \
U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF, \
U+3130..U+318F, U+A000..U+A48F,U+A490..U+A4CF
min_prefix_len = 0
min_infix_len = 1
ngram_len = 1
ngrams_chars = U+4E00..U+9FBF, U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF,\
U+2F800..U+2FA1F, U+2E80..U+2EFF, U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF,\
U+3040..U+309F, U+30A0..U+30FF, U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF,\
U+3130..U+318F, U+A000..U+A48F, U+A490..U+A4CF
}
indexer
{
mem_limit = 32M
}
searchd
{
# address = 0.0.0.0
port = 3312
log = d:/sphinx/log/searchd.log
query_log = d:/sphinx/log/query.log
read_timeout = 5
max_children = 30
pid_file = d:/sphinx/log/searchd.pid
max_matches = 1000
seamless_rotate = 1
}相关配置项说明:
Source部分配置项说明
#type 数据库类型,目前支持mysql与pgsql
#strip_html 是否去掉html标签
#sql_host 数据库主机地址
#sql_user 数据库用户名
#sql_pass 数据库密码
#sql_db 数据库名称
#sql_port 数据库采用的端口
#sql_query_pre 执行sql前要设置的字符集,用utf8必须SET NAMES utf8
#sql_query 全文检索要显示的内容,在这里尽可能不使用where或group by,将where与groupby的内容交给sphinx,由sphinx进行条件过滤与groupby效率会更高
#注意:select 出来的字段必须至少包括一个唯一主键(ARTICLESID)以及要全文检索的字段,你计划原本在where中要用到的字段也要select出来
#这里不用使用orderby
#sql_attr_开头的表示一些属性字段,你原计划要用在where,orderby,groupby中的字段要在这里定义
#根据我们原先的SQL:
#select * from eht_articles where title like ? and catalogid=? And edituserid=? And addtime between ? and ? order by hits desc
#我们需要对catalogid,edituserid,addtime,hits进行属性定义(这四个字段也要在select的字段列表中),定义时不同的字段类型有不同的属性名称,具体可以见sphinx.conf.in中的说明
index部分配置项说明
#source 数据源名
#path 索引记录
存放目录,如d:/sphinx/data/cgfinal,实际存放时会存放在d:/sphinx/data目录,然后创建多个cgfinal名称,不同扩展名的索引文件。
#其他的配置如min_word_len,charset_type,charset_table,ngrams_chars,ngram_len这些则是支持中文检索需要设置的内容。
#如果检索的不是中文,则charset_table,ngrams_chars,min_word_len就要设置不同的内容,具体官方网站的论坛中有很多,大家可以去搜索看看。5. 运行Sphin
x
首先要对数据进行索引或重建索引
进入命令行,运行d:/sphinx/bin/release/indexer –config d:/sphinx/sphinx.conf cgfinal
如果您在sphinx.conf中配置了多个数据源,想一次性全部索引则d:/sphinx/bin/release/indexer –config d:/sphinx/sphinx.conf –all
如果只是想对某个数据源进行索引,则d:/sphinx/bin/release/indexer –config d:/sphinx/sphinx.conf 索引名称(这里的索引名称是你在sphinx.conf中定义的索引名称)
运行检索守护进程searchd
进入命令行,运行d:/sphinx/bin/release/searchd –config
d:/sphinx/sphinx.conf,此时系统会在3312端口侦听mysql的全文检索请求,所以如果您的mysql与sphinx不在同一台
机器,要保证3312端口不被防火墙
阻隔。
6. 搜索(翻译)
6.1. 匹配模式
SPH_MATCH_ALL,匹配所有查询词(缺省模式)
SPH_MATCH_ANY,匹配任意查询词
SPH_MATCH_PHRASE,短语匹配
SPH_MATCH_BOOLEAN,布尔表达式匹配
SPH_MATCH_EXTENDED,查询匹配一个Sphin
x内部查询语言表达式
6.2. 布尔查询语法(Boolean query syntax)
布尔查询允许使用下面特殊操作符:
AND:hello & world
OR:hello | world
NOT:hello -world或hello !world
Grouping:(hello world)
举一个使用这些操作符的例子:
( cat -dog ) | ( cat -mouse)
AND是一个隐式操作符,“hello world”就相当于“hello & world”。
OR的优先级高于AND,所以“looking for cat | dog | mouse”的意思是“looking for (cat | dog | mouse)”而不是“(looking for cat) | dog | mouse”
象“-dog”这种隐式地包含了所有查询记录,是不会被执行的。这主要是考虑到技术上与性能上的原因,从技术上来说,sphinx不能总保持所有文章的ID列表,性能上来说,当结果集巨大(10-100M),执行这样的查询将费耗较长时间。
6.3. 扩展查询语法(Extended query syntax)
扩展查询允许合我下面特殊操作符:
操作符OR:hello | world
操作符NOT:hello -world或hello !world
字段搜索操作符:@title hello @body world
短语(phrase)搜索符:”hello world”
临近(proximity)搜索符:”hello world”~10
举例:
“hello world” @title “example program”~5 @body python -(php|perl)
AND是一个隐式操作符,”hello world”表示hello与world都要出现在匹配的记录中。
OR的优先级高于AND,所以“looking for cat | dog | mouse”的意思是“looking for (cat | dog | mouse)”而不是“(looking for cat) | dog | mouse”
临近距离在串中标明了,主要是用来调整单词数量,应用在引号中的所有查询字串。”cat dog
mouse”~5表示包括这三个单词在内,总共不能多于8个单词的间隔。比如”CAT aaa bbb ccc DOG eee fff
MOUSE”就不能匹配这个查询,因为单词间隔刚好是8个。
象aaa | ( bbb ccc | ( ddd eee ) )这样的括号嵌套查询目前还不支持,但以后会修正的。
否定(如NOT)只允许出现在顶层,不允许出现在括号内(如groups)。这点是不会改变的。因为支持否定嵌套查询会让短语排序(phrase ranking)的实现变得过于复杂。
6.4. 权重(匹配度,Weight)
采用什么权重功能取决于搜索模式(Search mode)
在权重函数中,有两个主要部分:(短语排名)phrase rank和statistical rank(统计排名)
短语排名是基于搜索词在文档和查询短语中的最长公共子序列(LCS)的长度。所以如果在记录中有切确的短语匹配,记录的短语排名将有可能是最高的,等于查询单词的总个数。
统计排名是建立在经典的BM25算法基础之上,它只考虑词频。词在全部文档集合中以低的频度出现或高频度出现在匹配的文档中,那么它获得的权重就越大,最终的BM25权重是一个介于0到1之间的小数。
好的子短语匹配得到好的排名,最好的匹配放到最顶端。Sphin
x作者的经验是:基于排名的密切短语比其它任何单独的统计方式表现出较好的搜索质量。
在SPH_MATCH_BOOLEAN 模式中,不需要计算权重,每条匹配记录的权重都是1
在SPH_MATCH_ALL和SPH_MATCH_PHRASE模式中,最终的权重是短语排名权重的总和
(TOFIX:翻译不畅)在SPH_MATCH_ANY模式中,本质上是一样的,但它也增加了每个字段的匹配单词数量,在这之前,短语排名权重乘以一个足够大的值以保证在任意一个字段的较高短语排名可以匹配排名较高者,即使它的字段权重比较低。
在SPH_MATCH_EXTENDED模式中,最终的权重是短语权重和BM25权重的总和,再乘以1000取整。
7. 如何调用Sphin
x
按上面配置,第5节点对数据库进行了索引,通过Sphin
x自带的search(在bin/release目录)就可以在命令行进行搜索:
(搜索CGArt)
windows
上:
search -c d:/sphinx/sphinx.conf CGArt
Linux上:
cd /usr/local/sphinx
./bin/search -c sphinx.conf CGArt
运行后,系统提示一堆信息:
....
....
words:
1. 'cgart': 36 documents, 189 hits
这个表示库中有36条记录符合要求,出现CGArt的有189处。应用程序如果想调用Sphin
x,可以从两个方面:
一是通过Sphin
x官方提供的API接口(接口有Python,Java,Php三种版本)
二是通过安装Sphin
xSE(具体见1.2部分),然后创建一个中介sphinxSE类型的表,再通过执行特定的SQL语句
实现。
通过官方API调用Sphin
x(以PHP为例)
在sphinx安装目录有一个API目录,里面有三个PHP文件:test.php,test2.php和sphinxapi.php。
sphinxapi.php是sphinx调用接口封装文件,test.php是一个在命令行下执行的查询例子文件,test2.php是一个生成摘要的
例子文件。
在命令下行运行test.php(Linux上没有API目录,需要从源程序包中复制api目录至/usr/local/sphinx)
Windows上:
D:\sphinx\bin\release>c:\php5.2\php.exe -c
c:\php5.2\php.ini ..\..\api\test.php -i cgfinal
CGartLinux上(php在/usr/local/php目录,sphinx.conf在/usr/local/sphinx目录):
cd /usr/local/sphinx
/usr/local/php/bin/php api/test.php -i cgfinal CGArtSphin
x的API查询接口主要有这些内容(其实对照 一下sphinxapi.php就清楚了):
//创建Sphin
x的客户端接口对象
$cl = new Sphin
xClient ();
//设置连接Sphin
x主机名与端口
$cl->SetServer('localhost',3312);
//可选,为每一个全文检索字段设置权重,主要根据你在sql_query中定义的字段的顺序,Sphin
x系统以后会调整,可以按字段名称来设定权重
$cl->SetWeights ( array ( 100, 1 ) );
//设定搜索模式,SPH_MATCH_ALL,SPH_MATCH_ANY,SPH_MATCH_BOOLEAN,SPH_MATCH_EXTENDED,SPH_MATCH_PHRASE
$cl->SetMatchMode(SPH_MATCH_ALL);
//设定过滤条件$attribute是属性名,相当于字段名(用SPH_MATCH_EXTENDED时),$value是值,$exclude是布尔型,
当为true时,相当于$attribute!=$value,默认值是false
$cl->SetFilter($attribute, $values, $exclude);
//设定group by
//根据分组方法,匹配的记录集被分流到不同的组,每个组都记录着组的匹配记录数以及根据当前排序方法本组中的最佳匹配记录。
//最后的结果集包含各组的一个最佳匹配记录,和匹配数量以及分组函数值
//结果集分组可以采用任意一个排序语句,包括文档的属性以及sphinx的下面几个内部属性
//@id--匹配文档ID
//@weight, @rank, @relevance--匹配权重
//@group--group by 函数值
//@count--组内记录数量
//$groupsort的默认排序方法是@group desc,就是按分组函数值大小倒序排列
$cl->SetGroupBy($attribute, $func, $groupsort);
//设定order by的内容,第一个参数是排序方法名,值有
// SPH_SORT_RELEVANCE,SPH_SORT_ATTR_DESC,SPH_SORT_ATTR_ASC,SPH_SORT_TIME_SEGMENTS,SPH_SORT_EXTENDED
//$sortby的值如"HITS desc"
$cl->SetSortMode(SPH_SORT_EXTENDED, $sortby);
//set count-distinct attribute for group-by queries,$distinct为字符串
$cl->SetGroupDistinct ( $distinct );
//相当于mysql的limit $offset,$limit
$cl->SetLimits($start,$limit)
//$q是查询的关键字,$index是索引名称,当等于*时表查询所有索引
$res = $cl->Query ( $q, $index );$cl->Query()返回的内容print_r后大概是:
Array
(
[error] =>
[warning] =>
[status] => 0
[fields] => Array
(
[0] => title
[1] => contents
[2] => author
)
[attrs] => Array
(
[catalogid] => 1
[addtime] => 2
[edituserid] => 1
[hits] => 1
)
[matches] => Array
(
[380] => Array
(
[weight] => 1
[attrs] => Array
(
[catalogid] => 7
[addtime] => 1112677492
[edituserid] => 1
[hits] => 1470
) )
[599] => Array
(
[weight] => 101
[attrs] => Array
(
[catalogid] => 7
[addtime] => 1115910729
[edituserid] => 1
[hits] => 1749
) )
[850] => Array
(
[weight] => 1
[attrs] => Array
(
[catalogid] => 2
[addtime] => 1118741392
[edituserid] => 1
[hits] => 289
) )
[877] => Array
(
[weight] => 1
[attrs] => Array
(
[catalogid] => 2
[addtime] => 1118898869
[edituserid] => 1
[hits] => 9870
) )
[1040] => Array
(
[weight] => 101
[attrs] => Array
(
[catalogid] => 2
[addtime] => 1120708579
[edituserid] => 1
[hits] => 318
) )
)
[total] => 129
[total_found] => 129
[time] => 0.000
[words] => Array
(
[design] => Array
(
[docs] => 129
[hits] => 265
)
)
)从上面可以看出Query并不能全部取得我们想要的记录内容,比如说Title,Contents字段就没有取出来,根据官方的说明是sphinx并没
有连到mysql去取记录,只是根据它自己的索引内容进行计算,因此如果想用sphinxAPI去取得我们想要的记录,还必须将Query的结果为依据去
查询MySQL才可以得到最终我们想要的结果集。
test2.php是一个摘要生成的例子文件,如果你的本地机器已装好sphinx,php运行环境,你可以通过浏览器看查看test2.php的运行效果。
假设我要搜索关键词”test”,通过sphinx可以取到搜索结果,在显示搜索结果时,我希望将含有”test”的进行红色或加粗显示,同时,我不希望
全部都显示出来,只需要显示一段摘要,就象google或百度那样,搜出来的结果不是全篇显示,只是部分显示,这个就是摘要的作用。
以test2.php中为例,以下是test2.php的代码:
require ( "sphinxapi.php" );
$docs = array
(
"this is my test text to be highlighted, and for the sake of the testing we need to pump its length somewhat",
"another test text to be highlighted, below limit",
"test number three, without phrase match",
"final test, not only without phrase match, but also above limit and with swapped phrase text test as well",
);
$words = "test";
$index = "cgfinal";
$opts = array
(
"before_match" => "<span style='font-weight:bold;color:red'>",
"after_match" => "</span>",
"chunk_separator" => " ... ",
"limit" => 60,
"around" => 3,
);
foreach ( array(0,1) as $exact )
{
$opts["exact_phrase"] = $exact;
print "exact_phrase=$exact\n";
$cl = new Sphin
xClient ();
$res = $cl->BuildExcerpts ( $docs, $index, $words, $opts );
if ( !$res )
{
die ( "ERROR: " . $cl->GetLastError() . ".\n" );
} else
{
$n = 0;
foreach ( $res as $entry )
{
$n++;
print "n=$n, res=$entry<br/>";
}
print "\n";
}
}在IE上运行的效果是:
在实际环境中,上面代码的$docs是我们用sphinx搜索出来的结果,这个结果利用BuildExcerpts方法可以实现摘要的功能。
采用Sphin
xSE方式调用Sphin
x
采用sphinxSE必须要求为mySQL安装sphinxSE Engine驱动,方法在第1节中我已讲到
要创建一张sphinx 专用表,你可以这样建
CREATE TABLE `sphinx` (
`id` int(11) NOT NULL,
`weight` int(11) NOT NULL,
`query` varchar(255) NOT NULL,
`CATALOGID` INT NOT NULL,
`EDITUSERID` INT NOT NULL,
`HITS` INT NULL,
`ADDTIME` INT NOT NULL,
KEY `Query` (`Query`)
) ENGINE=SPHINX DEFAULT CHARSET=utf8 CONNECTION='sphinx://localhost:3312/cgfinal';警告
注:与一般mysql表不同的是ENGINE=SPHINX DEFAULT CHARSET=utf8
CONNECTION='sphinx://localhost:3312/cgfinal';,这里表示这个表采用SPHINXSE引擎,字符集是
utf8,与sphinx的连接串是'sphinx://localhost:3312/cgfinal,cgfinal是索引名称
根据sphinx官方说明,这个表必须至少有三个字段,字段起什么名称无所谓,但类型的顺序必须是integer,integer,varchar,分别
表示记录标识document ID,匹配权重weight与查询query,同时document
ID与query必须建索引。另外这个表还可以建立几个字段,这几个字段的只能是integer或TIMESTAMP类型,字段是与sphinx的结果集
绑定的,因此字段的名称必须与在sphinx.conf中定义的属性名称一致,否则取出来的将是Null值。
比如我在上面有定义了sql_attr_uint= CATALOGID,sql_attr_uint=
EDITUSERID,sql_attr_uint = HITS,sql_attr_timestamp =
ADDTIME,那么在这个表里头,你就可以再定义CATALOGID,EDITUSERID,HITS,ADDTIME四个字段。
通过sql语句实现查询。通过select * from sphinx where query='sphinx表达式'
的方式可以实现查询,通过让sphinx表与eht_articles或其他表并联查询(条件是
sphinx.id=eht_articles.Articlesid)还可以实现更为复杂的sql,基本上可以符合我们日常的要求。
sphinx表达式在sphinx的手册
中也提到了,这里我简单说明几条:
query='关键字' ,关键字就是你要搜索的关键字,如query='CGArt'表示你要全文搜索CGArt
mode,搜索模式,值有:all,any,phrase,boolean,extended,默认是all
sort,排序模式,必须是relevance,attr_desc,attr_asc,time_segments,extended中的一种,在所有模式中除了relevance外,
属性名(或用extended排序)前面都需要一个冒号。
... where query='test;sort=attr_asc:hits';
... where query='test;sort=extended
weight desc,hits asc';
offset,结果记录集的起始位置,默认是0
limit,从结果记录集中取出的数量,默认是20条
index,要搜索的索引名称
... where query='test;index=cgfinal';
... where query='test;index=test1,test2,test3;';
minid,maxid,匹配最小与最大文档ID
weights,以逗号分割的分配给sphinx全文检索字段的权重列表
... where query='test;weights=1,2,3;';
filter,!filter,以逗号分隔的属性名与一堆要匹配的值
#只包括1,5,19的组
... where query='test;filter=group_id,1,5,19;';
#不包括3,11的组
... where query='test;!filter=group_id,3,11';
range,!range,逗号分隔的属性名一最小与最大要匹配的值
#从3至7的组
... where query='test;range=group_id,3,7;';
#不包括从5至25的组
... where query='test;!range=group_id,5,25;';
maxmatches,每个查询最大匹配的值
... where query='test;maxmatches=2000;';
groupby,group by 方法与属性
... where query='test;groupby=day:published_ts;';
... where query='test;groupby=attr:group_id;';
groupsort,group by 的排序
... where query='test;gropusort='@count
desc';需要注意的重要一点是让sphinx进行排序,过滤,切分结果记录集比用MySQL的where,orderby
和limit将有更好的效率。有两个原因,首先sphinx做了很多优化,在这些任务上它比mySQL做得更出色,其次searchd在打
包,sphinxSE在传输与解包上需要的数据量更少。
你可以通过运用join在sphinxSE的搜索表和其他引擎类型的表做并联查询。这有一个从example.sql中documents表的例子:
mysql> SELECT content, date_added FROM test.documents docs
-> JOIN t1 ON (docs.id=t1.id)
-> WHERE query="one document;mode=any";
+-------------------------------------+---------------------+
| content | docdate |
+-------------------------------------+---------------------+
| this IS my test document number two | 2006-06-17 14:04:28 |
| this IS my test document number one | 2006-06-17 14:04:28 |
+-------------------------------------+---------------------+
2 rows IN SET (0.00 sec)
mysql> SHOW ENGINE SPHINX STATUS;
+--------+-------+---------------------------------------------+
| Type | Name | STATUS |
+--------+-------+---------------------------------------------+
| SPHINX | stats | total: 2, total found: 2, time: 0, words: 2 |
| SPHINX | words | one:1:2 document:2:2 |
+--------+-------+---------------------------------------------+
2 rows IN SET (0.00 sec)8. Sphin
xSE的SQL查询例子演练
从eht_articles中查询标题含有“动画”关键字的记录。
SELECT c.* FROM eht_articles AS c,sphinx AS t WHERE c.articlesid=t.id AND query='@title 动画;mode=extended'提示
说明:要指定某个字段进行搜索,要用@字段名+空格+关键字+分号+mode=extended
如果不指定字段,则系统会对TITLE,CONTENTS进行搜索
,对什么字段进行全文检索取决于在sphinx.conf中sql_query定义的select 中的字段(文本类型)
从eht_articles中查询文章内容或标题含有“CGArt”关键字的记录。
SELECT c.* FROM eht_articles AS c,sphinx AS t WHERE
c.articlesid=sphinx.id AND
query='动画'若AUTHOR,TITLE,CONTENTS三个字段都全文索引了,但只想搜title,或contents中含有“动画”关键字
的文章
SELECT c.* FROM eht_articles AS c,sphinx AS t WHERE c.articlesid=t.id AND query='@title 动画 | @contents 动画;
mode=extended'查询标题含有“动画”关键字,catalogid为7,edituserid为1的记录
SELECT c.* FROM eht_articles AS c,sphinx AS t WHERE c.articlesid=t.id AND query='@title 动画;
filter=edituserid,1;filter=catalogid,7;mode=extended'提示
采用filter=字段名称,值就相当于where中的 字段名=值,filter提到的字段必须在sphinx的source部分的字段属性定义中定义,如
sql_attr_uint = CATALOGID
sql_attr_uint = EDITUSERID
sql_attr_uint = HITS
sql_attr_timestamp = ADDTIME查询标题含有“动画”关键字,按人气Hits从大至小,栏目ID从大至小排序
SELECT c.* FROM eht_articles AS c,sphinx AS t WHERE c.articlesid=t.id AND query='@title 动画;mode=extended;
sort=extended:hits desc,catalogid
desc'在sphinx中,select出来的内容是按weight从大至小排序的,weight是根据sphinx内部一定的算法算出来的,越大就表
示越匹配,如果想按匹配度从大至小排序,则可以:
SELECT c.* FROM eht_articles AS c,sphinx AS t WHERE c.articlesid=t.id AND query='@title 动画;mode=extended;
sort=@weight desc'搜内容或标题含有优秀或Icon或设计,按catalogid分组,按匹配度从高至低排序
SELECT t.*,c.* FROM eht_articles AS c,sphinx AS t WHERE c.articlesid=t.id AND query='优秀 | Icon | 设计;
mode=extended;groupby=attr:catalogid;groupsort=@weight;'9. 如何自动重建索引
10. 相关资源
用php构建自定义搜索引擎 官方手册文档 本文中提到的sphinx.conf配置文件(用GBK编码查看)
相关推荐
Sphinx Mysql Full-Search 速成指南 - 搜索引擎
内容概要:本文详细介绍了考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度方法。在供给侧,引入了有机朗肯循环(ORC)实现热电联产机组的灵活响应;在需求侧,提出电、热、气负荷之间的可替代性,以提高能源利用效率。构建了以最小化碳排放成本、购能成本、弃风成本和需求响应成本为目标的优化调度模型,并采用MATLAB和CPLEX进行了模型构建和求解。文中提供了具体的代码示例,展示了如何处理热电耦合、负荷替代和阶梯式碳交易等问题。 适合人群:从事能源系统优化、电力系统调度、碳交易等相关领域的研究人员和技术人员。 使用场景及目标:适用于需要优化能源系统调度、降低成本并减少碳排放的实际应用场景。目标是帮助读者理解和掌握如何通过先进的技术和算法实现更加灵活和高效的能源调度。 其他说明:文章提供了完整的代码实现和服务支持,包括12种典型场景的数据集和预设模型,方便读者快速上手实践。
内容概要:本文详细介绍了一个利用欧姆龙CP1H PLC及其CIF11通讯板与三台东元N310变频器进行通讯的实战案例。主要内容涵盖硬件配置(包括接线方式和终端电阻设置)、变频器参数设置(如波特率、站号等)、PLC编程(含频率设定、实际频率和输出电压读取的具体指令及其实现方法)、以及调试过程中遇到的问题和解决方案。此外,还提供了关于如何扩展更多变频器的方法,强调了通讯稳定性和高效性的优化措施。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要掌握PLC与变频器通讯技能的人群。 使用场景及目标:适用于需要对多个变频器进行集中控制和监测的应用场合,如工厂生产线、电力系统等。主要目的是提高系统的集成度和可靠性,降低维护成本。 其他说明:文中不仅给出了详细的代码片段,还包括了许多宝贵的实践经验,对于初学者来说是非常好的参考资料。同时,作者也提到了一些常见的陷阱和注意事项,有助于读者少走弯路。
内容概要:本文详细介绍了如何在Simulink中构建TCR+FC型静止无功补偿器(SVC)的仿真模型。首先,文章解释了TCR(晶闸管控制电抗器)和FC(固定电容器)的工作原理及其在电力系统中的重要性。接着,逐步讲解了模型搭建的关键步骤,包括晶闸管参数设置、触发脉冲生成、滤波器设计以及控制策略的选择。文中特别强调了触发角控制对补偿效果的影响,并提供了具体的MATLAB代码示例。此外,作者分享了许多实践经验,如如何应对现场环境变化带来的参数偏差、如何防止谐振等问题。最后,通过对不同工况下仿真结果的分析,展示了该模型在改善电压稳定性、提高功率因数方面的显著效果。 适合人群:从事电力系统研究和技术开发的专业人士,尤其是那些希望深入了解SVC工作原理及其仿真方法的研究人员和工程师。 使用场景及目标:适用于需要进行电力系统无功补偿装置性能评估、优化设计的研究机构或企业。主要目标是在确保系统稳定性的前提下,最大化提升无功补偿效率,降低谐波污染,从而保障电网的安全运行。 其他说明:文中不仅提供了详细的建模指导,还包括许多实用的小贴士和注意事项,帮助读者避开常见陷阱,快速掌握核心技术要点。同时,附带的实际案例分析有助于加深理解,使读者能够将所学应用于实际工程项目中。
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
智云物业小程序v3.5.0高级版 微信 支付宝前端 版本号:3.5.0智云物业 抄表可以直接录入表号 社区发图多由5张改为9张 添加付出通道对接 车位锁bug批改 细节调整和优化 功能特色: 1. 可视化楼宇房产管理,一键生成楼宇房产(支持EXCEL导入) 2. 住户管理(业主、成员、租户),严格、宽松和自由三种注册方式 3. 报修和投诉建议完整处理流程(派单与抢单),内部工单处理(派单与抢单) 4. 智能门禁(微信开门、定位防骚扰、开门日志)、人脸识别、蓝牙 5. 商铺和车位管理,一键生成或EXCEL导入 6. 多收费项目管理,批量生成账单,前后台收银,可视化管理 7. 社区论坛、邻里互动、新动态 8. WQ独立后台、物业独立后台,权限角色完全分开 9. 版权自定义设置、页面自定义图标及链接 10. 统计分析报表、打通WQ会员、会员组及积分 11. 物业手机端住户管理、上门收费、账单核销、抄表录入、巡更 12. 线下周边商家(集积分、支付、活动、红包于一体) 13. 积分红包、挪车服务、打包小程序、智能充电站、自助智能设备(如:洗车机、饮水机等) 14. 全局权限控制、公众号授权、自定义系统帮助 15. 对接多家车牌识别管理系统,在线缴费、办理月卡、统计报表 16.?快递驿站、活动管理(投票、报名、问卷)、管理看板
内容概要:本文详细介绍了在一个新能源物料输送系统中,利用西门子S7-1200 PLC和昆仑通态触摸屏实现物料输送控制的具体方法。主要内容涵盖硬件配置(如PLC、称重仪表、RS485通信模块)、通信配置(如RS485参数设置)、软件开发(如博途V16编程、模拟量采集、物料输送控制逻辑)以及触摸屏组态开发等方面。文中不仅提供了具体的配置步骤和技术细节,还分享了许多实际开发中的经验和常见问题解决方法。 适合人群:自动化领域的工程师和技术人员,尤其是那些正在从事或计划从事PLC控制系统的开发和维护工作的人员。 使用场景及目标:适用于需要开发类似物料输送系统的工程项目,旨在帮助读者掌握PLC控制系统的开发技能,提高系统稳定性和可靠性,减少开发过程中的错误和问题。 其他说明:文中提到的实际案例和开发经验对于理解和解决工业自动化项目中的常见问题非常有帮助。同时,文中提供的代码片段和配置示例可以直接应用于实际项目中,方便读者快速上手。
内容概要:本文详细介绍了如何在Matlab/Simulink环境下构建光伏储能系统与虚拟同步发电机(VSG)并网的模型。首先,文章阐述了整体思路,即实现直流侧光储与VSG并网的完美配合。接着,分别讲解了光伏部分、储能部分和VSG部分的具体实现方法,包括光伏电池模型的选择、储能电池的参数设置以及VSG控制算法的设计。此外,文章还讨论了光照强度变化的设置及其对系统的影响,并提供了详细的波形分析。最后,针对模型调试过程中遇到的问题提出了有效的解决方案。 适合人群:从事电力电子、新能源发电领域的研究人员和技术人员,尤其是熟悉Matlab/Simulink工具的用户。 使用场景及目标:适用于希望深入了解光伏储能系统与虚拟同步发电机并网机制的研究人员和技术人员。主要目标是掌握如何在Matlab/Simulink中搭建和优化此类模型,以便更好地应用于实际工程实践中。 其他说明:文中提供的代码片段和调试技巧对于初学者非常有帮助,同时也为高级用户提供了一些优化建议。通过对不同参数的调整,如虚拟惯量、阻尼系数等,可以进一步提高系统的稳定性和响应速度。
【蓝桥杯EDA】客观题解析
表格可以详细查询到商用车CAN通信里每个信号具体的定义,SPN,每一位信号的定义
内容概要:本文详细介绍了直驱永磁风机的Simulink仿真模型,涵盖了机侧和网侧控制、低电压穿越控制(chopper电路控制)、风速模拟及最大功率点跟踪(MPPT)。机侧控制采用了内外双环结构,通过零d轴电流(ZDC)控制降低铜损,提高效率;MPPT则通过最优转矩(OTC)控制实现。网侧控制包括并网和脱网两种模式,分别采用双闭环解耦控制和闭环无源逆变控制。低电压穿越控制通过chopper电路确保电网电压异常时风机的稳定运行。风速模拟部分使用了复杂的风速模型,使仿真更加接近实际情况。此外,文中还提到了详细的参数设定和调试经验,以及相关文献的支持。 适合人群:从事风电系统设计、仿真建模的研究人员和技术人员,尤其是对直驱永磁风机及其控制系统感兴趣的工程师。 使用场景及目标:适用于需要深入了解直驱永磁风机Simulink仿真的研究人员和技术人员。主要目标是掌握直驱永磁风机的控制策略,包括内外双环控制、低电压穿越控制、风速模拟及MPPT的具体实现方法,以便应用于实际项目中。 其他说明:文中提供的代码片段和参数设定有助于读者更好地理解和应用这些控制策略。同时,参考文献也为进一步研究提供了理论依据。
内容概要:本文详细介绍了如何在Simulink环境中构建永磁同步电机(PMSM)的多故障诊断模型,特别是针对绕组匝间短路和转子偏心故障的联合诊断。文章首先展示了如何通过MATLAB代码实现绕组电阻变化模型,解释了故障注入的关键参数设置及其背后的物理意义。接着讨论了混合故障建模的方法,强调了机械偏心和电气短路之间的耦合关系,并提供了具体的Simulink模块连接方式。文中还探讨了多种先进的故障特征提取技术,如改进的S变换、小波包分解以及经验模态分解,并推荐使用MATLAB的signalDiagnosticDesigner工具来自动生成特征提取代码。此外,文章介绍了不同类型的观测器设计,包括磁链观测器和滑模观测器,并分享了一些实用的经验技巧。最后,文章提出了几种有效的故障分类算法,如改进的KNN和支持向量机结合长短期记忆网络的混合模型。 适合人群:从事电机控制系统设计的研究人员和技术工程师,尤其是那些对永磁同步电机故障诊断感兴趣的从业者。 使用场景及目标:适用于希望深入了解永磁同步电机内部故障机制并在Simulink平台上进行仿真的专业人士。主要目标是提高故障检测精度,优化故障处理策略,确保系统的稳定性和可靠性。 其他说明:文中提供的代码片段和建模思路可以帮助读者快速入门并掌握复杂的故障诊断流程。同时,作者还分享了许多宝贵的实践经验,有助于避免常见的错误和陷阱。
内容概要:本文详细介绍了三菱Q系列11轴运动控制项目的实施细节,涵盖PLC程序、触摸屏程序、电气清单及完整电路图。PLC程序采用分工位编辑,确保各工位独立控制,便于调试和维护。触摸屏程序实现了对各工位的实时监控和参数修改,增强了系统的灵活性。电气清单详尽列出所有电气元件及其规格,电路图展示了元件间的连接关系,有助于现场布局和故障排查。此外,文中还涉及定位模块和模拟量模块的应用,提升了系统的控制精度和稳定性。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些负责多轴运动控制系统的开发和维护人员。 使用场景及目标:适用于需要进行复杂多轴运动控制的工业生产线,旨在提高生产效率、降低维护成本,并提供详细的编程和设计指导。 其他说明:文章不仅提供了具体的代码示例和电路图,还包括了许多实用的设计技巧和注意事项,如异常处理机制、信号隔离方法以及变量命名规范等,这些都是实际项目中非常宝贵的经验总结。
在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。
内容概要:本文详细介绍了基于MATLAB的车牌识别技术,涵盖了从图像预处理到最终字符识别的完整流程。首先,文章强调了MATLAB环境配置及相关图像处理工具箱的重要性。接着,逐步展示了核心代码片段,如图像读取、灰度转换、边缘检测、形态学操作、轮廓提取、车牌区域筛选等关键技术。此外,还探讨了字符分割方法,包括垂直投影法和连通域分析,并介绍了模板匹配用于字符识别的具体实现。文中不仅提供了代码示例,还附带了详细的Word版解析,解释了各个函数的作用及参数选择依据,帮助读者深入理解每一环节的工作机制。 适合人群:对图像处理和车牌识别感兴趣的初学者、有一定编程基础的研究人员和技术爱好者。 使用场景及目标:适用于学术研究、教学演示以及小型项目的快速原型开发。主要目标是使读者能够掌握车牌识别的基本原理和技术细节,从而应用于实际场景中。 其他说明:文章特别指出了一些常见问题及其解决办法,例如如何应对复杂光照条件、字符粘连等问题,并给出了具体的优化建议。同时,强调了代码实现过程中需要注意的各种细节,如参数调整、图像预处理等,以提高识别精度。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
街道行政区划shp,wgs84坐标系
easyocr安装包和模型