﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我爱我的家园!-文章分类-新思路</title><link>http://www.blogjava.net/Yipak/category/26293.html</link><description>成功在于你是否努力,希望在于你是否相信自己! </description><language>zh-cn</language><lastBuildDate>Sun, 30 Sep 2007 06:30:24 GMT</lastBuildDate><pubDate>Sun, 30 Sep 2007 06:30:24 GMT</pubDate><ttl>60</ttl><item><title>内容管理系统(CMS)的设计和选型</title><link>http://www.blogjava.net/Yipak/articles/149849.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Sun, 30 Sep 2007 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/149849.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/149849.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/149849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/149849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/149849.html</trackback:ping><description><![CDATA[
		<h2 id="archive-title">内容管理系统(CMS)的设计和选型</h2>
		<p>
				<br /> </p>
		<div class="entry-content">
				<div class="entry-body">
						<p>内容摘要：<br /></p>
						<ul>
								<li>
										<a href="http://www.chedong.com/tech/cms.html#intro">内容管理系统概述</a>
								</li>
								<li>
										<a href="http://www.chedong.com/tech/cms.html#cms">内容管理系统的选型</a>
								</li>
								<li>
										<a href="http://www.chedong.com/tech/cms.html#ads">广告管理系统的选型</a>
								</li>
								<li>
										<a href="http://www.chedong.com/tech/cms.html#bbs">论坛/社区系统的选型</a>
										<br />
								</li>
								<li>
										<a href="http://www.chedong.com/tech/cms.html#wysiwyg">所见即所得编辑器的选型</a>
										<br />
								</li>
								<li>
										<a href="http://www.chedong.com/tech/cms.html#upload">图片上传和文件管理组件</a>
										<br />
								</li>
						</ul>
				</div>
				<div class="entry-more" id="more">
						<h2>
								<a name="intro">
								</a>内容管理系统概述</h2>
						<br />内容管理系统是一个很泛的概念：从商业门户网站的新闻系统到个人的Weblog都可以称作发布系统。<br /><ul><li>框架型：本身不包含任何应用实现，只是提供了底层框架，具体应用需要一定的二次开发，比如Cocoon，Vignette； 
</li><li>应用型：本身是一个面向具体类型的应用实现，已经包含了新闻/评论管理，投票，论坛，WIKI等一些子系统。比如：<a href="http://www.postnuke.com/">postNuke</a><a href="http://www.xoops.org/">xoops</a>等；<br /></li></ul><p>但无论如何，在发布系统选型之前，首先了解自己的实际需求是最重要的：想根据现成系统将自己的需求硬往上照搬是非常不可取的。访问量，权限控制和各种功能需求。每个模块和功能自己都比较清晰一点以后，再去网上找找类似的实现：你会发现其实每个环节到目前上都有比较成熟的实现了，而且还在不断完善和发展中，如果没有：你的需求太特殊，或者可以尝试分解成更小的系统组合实现。<br /></p><p>内容管理系统被分离成以下几个层面：各个层面优先考虑的需求不同<br /></p><ol><li>后台业务子系统管理（管理优先：内容管理）：新闻录入系统，BBS论坛子系统，全文检索子系统等，针对不同系统的方便管理者的内容录入：所见即所得的编辑管理界面等，清晰的业务逻辑：各种子系统的权限控制机制等； 
</li><li>Portal系统（表现优先：模板管理）：大部分最终的输出页面：网站首页，子频道/专题页，新闻详情页一般就是各种后台子系统模块的各种组合，这种发布组合逻辑是非常丰富的，Portal系统就是负责以上这些后台子系统的组合表现管理； 
</li><li>前台发布（效率优先：发布管理）：面向最终用户的缓存发布，和搜索引擎spider的URL设计等…… </li></ol>内容管理和表现的分离：很多成套的CMS系统没有把后台各种子系统和Portal分离开设计，以至于在Portal层的模板表现管理和新闻子系统的内容管理逻辑混合在一起，甚至和BBS等子系统的管理都耦合的非常高，整个系统会显得非常庞杂。而且这样的系统各个子系统捆绑的比较死，如果后台的模块很难改变。但是如果把后台各种子系统内容管理逻辑和前台的表现/发布分离后，Portal和后台各个子系统之间只是数据传递的关系：Portal只决定后台各个子系统数据的取舍和表现，而后台的各个子系统也都非常容易插拔。<br /><br />内容管理和数据分发的分离：需要要Portal系统设计的时候注意<a href="http://www.chedong.com/tech/cache.html">可缓存性（Cache Friendly）性设计</a>：CMS后台管理和发布机制，本身不要过多考虑“效率”问题，只要最终页面输出设计的比较Cacheable，效率问题可通过更前端专门的缓存服务器解决。<br /><br />此外，就是除了面向最终浏览器用户外，还要注意面向<a href="http://www.chedong.com/tech/google_url.html">搜索引擎友好(Search engine Friendly)的URL设计</a>：通过URL REWRITE转向或基于PATH_INFO的参数解析使得动态网页在链接（URI）形式上更像静态的目录结构，方便网站内容被搜索引擎收录；<br /><br /><pre>---------------    ---------------     ---------------                    <br />|新闻管理子系统|   | BBS论坛子系统|    | 商城子系统  |                    <br />---------------    ---------------     ---------------                    <br />      |       \     /    |     \           /   内                         <br />      |        ----------|---   \         /    容   &lt;== 业务子系统（零件生产）<br />      |           /      |   \   \       /     管                         <br />    ---------------      |    ---------------  理                         <br />    |专题制作子系统|     |    |全文检索子系统|                            <br />    ---------------      |    ---------------                             <br />                 \       |          /                                     <br />-------------------------|---------------------------------------------   <br />                   \     |        /            频                         <br />                   ---------------             道   &lt;== Portal系统（产品组装）<br />                   | Portal 系统 |             管                         <br />                   ---------------             理                         <br />                         |                                                <br />-------------------------|---------------------------------------------   <br />                         |                     前                         <br />                         |                     台   &lt;== 发布系统（分发代理）  <br />                  ---------------              发                         <br />                  |前台发布系统 |              布                         <br />                  ---------------                                         <br />                    /        \                                            <br />                   /          \                                           <br />      ---------------      ---------------                                <br />      | 用户浏览器   |     |Search Engine|                                <br />      ---------------      ---------------                                <br /><br /></pre>这里，我把在内容发布系统选型中找到的一些资料总结如下： 
<ol></ol><p></p><h2><a name="cms"></a>内容管理系统的选型</h2><p></p><p>关键词：CMS Content Manage System<br /></p><p>CMS行业研究<br /><a href="http://www.cmswatch.com/">http://www.cmswatch.com/</a><br /><a href="http://www.cmsreview.com/">http://www.cmsreview.com/</a><br /><a href="http://www.cmsinfo.org/">http://www.cmsinfo.org/</a><br /></p>CMS讨论邮件列表<br /><a href="http://www.cms-list.org/">http://www.cms-list.org/</a><p>商业软件和开源项目列表：<br /><a href="http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/">http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/</a><br /></p><p>推荐：基于XML的发布框架<br /><a href="http://cocoon.apache.org/">http://cocoon.apache.org/</a><br /></p><p>具体实现复杂程度可能会根据需求的不同而不同，但越是大型的系统越是需要分工：将内容（数据），表现（模板）和应用逻辑（程序）尽可能分离和对这3 者的管理。<br /></p><p>Portal---门户系统 <br />Open source Projects: <br /><a href="http://jportlet.sourceforge.net/">http://jportlet.sourceforge.net/</a><br />Apache Software Foundation: Jakarta JetSpeed 1.3<br />JetSpeed home page: <a href="http://jakarta.apache.org/jetspeed/site/index.html">http://jakarta.apache.org/jetspeed/site/index.html</a><br />JetSpeed Portlet API: <a href="http://cvs.apache.org/viewcvs/jakarta-jetspeed/proposals/portletAPI/">http://cvs.apache.org/viewcvs/jakarta-jetspeed/proposals/portletAPI/</a><br /><a href="http://www.liferay.com/home/index.jsp">http://www.liferay.com/home/index.jsp</a><br /><a href="http://basicportal.com/">http://basicPortal.com/</a><br /><a href="http://www.jahia.org/">http://www.jahia.org/</a><br /><a href="http://jporta.sourceforge.net/">http://jporta.sourceforge.net/</a><br /><br />商业软件：<br />BEA WebLogic Portal - <a href="http://edocs.bea.com/wlp/docs81/javadoc/com/bea/portal/model/Portlet.html">http://edocs.bea.com/wlp/docs81/javadoc/com/bea/Portal/model/Portlet.html</a><br />IBM Websphere Portal - <a href="http://www.software.ibm.com/wsdd/zones/portal/">http://www.software.ibm.com/wsdd/zones/Portal/</a><br />Oracle Portal Developer Kit - <a href="http://portalstudio.oracle.com/">http://Portalstudio.oracle.com/</a><br /><br />其它: <br />PSML - <a href="http://jakarta.apache.org/jetspeed/site/psml.html">http://jakarta.apache.org/jetspeed/site/psml.html</a><br />BEA: Web Logic Portal 4.0 <a href="http://www.bea.com/products/weblogic/portal/index.shtml">http://www.bea.com/products/weblogic/Portal/index.shtml</a><br />IBM: WebSphere Portal 2.1 <a href="http://www-4.ibm.com/software/webservers/portal/">http://www-4.ibm.com/software/webservers/Portal/</a><br />iPlanet: iPlanet Portal Server 3.0 <a href="http://www.iplanet.com/products/iplanet_portal/home_portal.html">http://www.iplanet.com/products/iplanet_Portal/home_Portal.html</a><br />Oracle: Oracle 9i Portal <a href="http://www.oracle.com/ip/deploy/ias/portal/index.html">http://www.oracle.com/ip/deploy/ias/Portal/index.html</a><br />SAP Portal: <a href="http://www.iviewstudio.com/">http://www.iviewstudio.com/</a><br />Epicentric Portal: <a href="http://www.epicentric.com/solutions/products/efs/">http://www.epicentric.com/solutions/products/efs/</a><br /><br />参考：<br /><a href="http://www.waferproject.org/index.html">Wafer：Java开发框架研究</a><br />http://www.waferproject.org/index.html<br /><br /><a href="http://udoo.51.net/mt/archives/000011.html">门户(Portal)系统相关开发框架：</a><br />http://udoo.51.net/mt/archives/000011.html<br /></p><h2><a name="ads"></a>广告管理系统 </h2><p>关键词：ad server</p><p>广告系统和内容的分离，可以大大降低系统之间的关联度。<br /> <br />专业行业研究网站：<br /><a href="http://adres.internet.com/">http://adres.internet.com/</a><br /><br />相关厂商和开源项目：<br /><a href="http://directory.google.com/Top/Computers/Programming/Languages/PHP/Scripts/Ad_Management/?il=1">http://directory.google.com/Top/Computers/Programming/Languages/PHP/Scripts/Ad_Management/?il=1</a><br /><a href="http://directory.google.com/Top/Computers/Software/Internet/Servers/Advertising/?tc=1">http://directory.google.com/Top/Computers/Software/Internet/Servers/Advertising/?tc=1</a><br /><a href="http://www.jspin.com/home/apps/admanage?cob=winedit">http://www.jspin.com/home/apps/admanage?cob=winedit</a><br /><a href="http://www.scriptdex.com/dex/php_ad_management.shtml">http://www.scriptdex.com/dex/php_ad_management.shtml</a><br /></p><p>推荐：<br /><a href="http://www.phpadsnew.com/">http://www.phpadsnew.com/</a> 功能性比较强 <br /><a href="http://oasis.sourceforge.net/">http://oasis.sourceforge.net/</a> 免费 基于日志记录和定期导入MYSQL统计，可以负载50万请求/每小时 以上<br /><br />如果看重广告的第3方特性，可以选择第三方服务：<br /><a href="http://www.doubleclick.net/">http://www.doubleclick.net/</a><br /><a href="http://www.allyes.com/">http://www.allyes.com/</a><br /></p><h2><a name="bbs"></a>论坛/社区系统 </h2>关键词： BBS FORUM<br /><br />论坛软件介绍：<br /><a href="http://directory.google.com/Top/Computers/Internet/Web_Design_and_Development/Message_Boards/">http://directory.google.com/Top/Computers/Internet/Web_Design_and_Development/Message_Boards/</a><br /><br />推荐：<br /><a href="http://www.phpbb.com/">http://www.phpbb.com/</a> PHP + MySQL open source<br /><a href="http://www.vbulletin.com/order/">http://www.vbulletin.com/order/</a> PHP + MySQL  有付费的商业支持85－160$<br /><br /><a href="http://www.jivesoftware.com/products/pricing.jsp">http://www.jivesoftware.com/products/pricing.jsp</a> 商业论坛系统，1000$－2500$ 有知识库扩展应用<br /><a href="http://yazd.yasna.com/features.jsp">http://yazd.yasna.com/features.jsp</a> 基于 Java<br /><h2><a name="wysiwyg"></a>所见即所得（WYSIWYG）编辑器</h2>在内容的录入管理方面，所见即所得是比较重要的，这样可以大大简化对系统中布局排版的需求。<br />基于浏览器的WYSIWYG（所见即所得）编辑器是CMS设计中，编辑工具的主要考虑方面。目前主要是通过JAVASCRIPT调用IE或其他浏览器的内置方法实现。其中基于IE5.5浏览器的实现最为简洁。这里有一个完整的例子：<br /><a href="http://www.devarticles.com/c/a/HTML/Building-a-WYSIWYG-HTML-Editor-Part-1/">Building a WYSIWYG HTML Editor Part 1/2</a><br /><a href="http://www.devarticles.com/c/a/HTML/Building-a-WYSIWYG-HTML-Editor-Part-2/">Building a WYSIWYG HTML Editor Part 2/2</a><br /><br />主要功能：<br /><ul><li>能够通过JAVASCRIPT实现的基本功能：加粗，斜体字，居中，添加链接，添加图片，模式切换：HTML和文本模式的切换， 
</li><li>Word垃圾代码过滤 
</li><li>图片上载接口：图片上载最好通过其他独立模块实现。 </li></ul>选型指标：<br /><ul><li>不依赖服务器端代码：只通过JAVASCRIPT或客户端控件实现代码，可以保证以后系统迁移的方便。 
</li><li>WORD垃圾代码过滤 </li></ul>可视化编辑器大全：<br /><a href="http://www.bris.ac.uk/is/projects/cms/ttw/ttw.html">http://www.bris.ac.uk/is/projects/cms/ttw/ttw.html</a><br /><br />推荐：<br /><a href="http://www.aine.be/aynhtml/">http://www.aine.be/aynhtml/</a><br /><br /><h2><a name="upload"></a>图片/文件上传组建</h2>图片和文件等非结构化数据还是分别使用另外的服务解决比较好。这样可以大大简化CMS本身的复杂程度。<br /><br />推荐：<br />文件上传：<br /><a href="http://jakarta.apache.org/commons/">Apache Commons项目</a><br />http://jakarta.apache.org/commons/<br /><br /><a href="http://rsb.info.nih.gov/ij/">ImageJ：图片处理缩略图生成和水印等</a><br />http://rsb.info.nih.gov/ij/<br /><br />关于Blog系统的选型，目前主流的基于PHP的包括：<br />· Nucleus 3.0 <a href="http://www.nucleuscms.org/">http://www.nucleuscms.org/</a><br />· pmachine 2.3 <a href="http://www.pmachine.com/">http://www.pmachine.com/</a><br />· b2evolution 0.9.0.3 <a href="http://www.b2evolution.net/">http://www.b2evolution.net/</a><br />· Serendipity 0.6 <a href="http://www.s9y.org/">http://www.s9y.org/</a><br />· WordPress 1.2 <a href="http://www.wordpress.org/">http://www.wordpress.org/</a><br />· bBlog 0.7.3 <a href="http://www.bblog.com/">http://www.bblog.com/</a><br />· pLog 0.3.1 <a href="http://www.plogworld.org/">http://www.plogworld.org/</a><br />· Simplog .9 <a href="http://www.simplog.org/">http://www.simplog.org/</a><br />· Textpattern 1.18a <a href="http://www.textpattern.com/">http://www.textpattern.com/</a><br /><br /><br />原帖: <a href="http://www.chedong.com/tech/cms.html">http://www.chedong.com/tech/cms.html</a></div>
		</div>
<img src ="http://www.blogjava.net/Yipak/aggbug/149849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2007-09-30 12:33 <a href="http://www.blogjava.net/Yipak/articles/149849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Lucene/XML的站内全文检索解决方案：WebLucene</title><link>http://www.blogjava.net/Yipak/articles/149846.html</link><dc:creator>死神</dc:creator><author>死神</author><pubDate>Sun, 30 Sep 2007 04:29:00 GMT</pubDate><guid>http://www.blogjava.net/Yipak/articles/149846.html</guid><wfw:comment>http://www.blogjava.net/Yipak/comments/149846.html</wfw:comment><comments>http://www.blogjava.net/Yipak/articles/149846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yipak/comments/commentRss/149846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yipak/services/trackbacks/149846.html</trackback:ping><description><![CDATA[
		<div class="entry-content">
				<div class="entry-body">
						<p>内容摘要：<br />为Lucene做一个通用XML接口一直是我最大的心愿：更方便的在WEB应用中嵌入全文检索功能</p>
						<ul>
								<li>提供了XML的数据输入接口：适合将原有基于各种数据库的数据源导入到全文索引中，保证了数据源的平台无关性； 
</li>
								<li>通过了基于XML的搜索结果输出：方便了通过XSLT进行前台的结果显示； </li>
						</ul>
						<pre>
								<br />    MySQL  \                                                  / JSP    <br />    Oracle - DB      -  ==&gt;   XML ==&gt; (Lucene Index) ==&gt; XML  -  ASP    <br />    MSSQL  /                                                  -  PHP            <br />             MS Word /                                        \         / XHTML<br />                 PDF /                                         =XSLT=&gt; -  TEXT<br />                                                                        \ XML                                                                     <br />                                \_________WebLucene__________/ <br />使用过程如下：<br /></pre>
						<ol>
								<li>将数据用脚本导出成XML格式； 
</li>
								<li>将XML数据源导入LUCENE索引； 
</li>
								<li>从WEB界面得到XML结果输出，并通过XSLT生成HTML页面<br /></li>
						</ol>
				</div>
				<h2 class="entry-more">站内全文检索的必要性</h2>
				<div class="entry-more">虽然大型搜索引擎的功能已经越来越强大了，很多站点都使用了<a href="http://www.google.com/services/free.html">Google的站内检索</a>site:domain.com代替了自己的站内数据库“全文”检索。 但依靠GOOGLE这样的大型搜索引擎做站内检索会有以下弊端：<br /></div>
				<div class="entry-more">
						<ul>
								<li>数量有限：搜索引擎并不会深度遍历一个网站，而将网站所有的内容都索引进去，比如Google就喜欢静态网页，而且是最新更新的，而不喜欢带?的动态网页，Google甚至会定期将缺少入口的网站内容逐渐抛弃； 
</li>
								<li>更新慢：搜索引擎针对站点的更新频率也是有一定周期的，很多内容需要一定时间后才能进入GOOGLE的索引：目前Google Dance的周期是21天左右； 
</li>
								<li>内容不精确：搜索引擎需要通过页面内容提取技术将导航条，页头页尾等内容过滤掉，反而不如直接从后台数据库提取数据来得直接，这种摘要和排重机制是很难实现的； 
</li>
								<li>无法控制输出：也许有更多的输出需求，按时间排序，按价格，按点击量，按类目过滤等 </li>
						</ul>
				</div>
				<h2>系统的搭建</h2>下载：<br /><a href="http://sourceforge.net/projects/weblucene/">http://sourceforge.net/projects/weblucene/</a><br /><br />XML数据源的导入：<br /><br />只要数据源可以导出成3层的XML结构，就都可以用IndexRunner这个命令行工具导入：<br /><br />比如从数据库导出：news_dump.xml<br />&lt;?xml version="1.0" encoding="GB2312"?&gt;<br />&lt;Table&gt;<br />    &lt;Record&gt;<br />        &lt;Title&gt;标题&lt;/Title&gt;<br />        &lt;Author&gt;作者&lt;/Author&gt;<br />        &lt;Content&gt;内容&lt;/Content&gt;<br />        &lt;PubTime&gt;2003-06-29&lt;/PubTime&gt;       <br />    &lt;/Record&gt;<br />    &lt;Record&gt;<br />        &lt;Title&gt;My Title&lt;/Title&gt;<br />        &lt;Author&gt;chedong&lt;/Author&gt;<br />        &lt;Content&gt;abc&lt;/Content&gt;<br />        &lt;PubTime&gt;2003-06-30&lt;/PubTime&gt;<br />    &lt;/Record&gt;<br />    ...<br />&lt;/Table&gt;<br /><br />IndexRunner -i news_dump.xml -o c:\index -t Title,Content -n Author <br />-i news_dump.xml:  以news_dump.xml为数据源<br />-o c:\index   索引库建立在c:\index目录下<br />索引建立Title Author Content PubTime这几个字段外，按以下规则建立索引：<br />-t Title,Content 一个进行分词的全文索引TokenIndex：数据是Title Content这2个字段<br />-n Author    一个不分词的索引：NoTokenIndex：数据源是Author这个字段。<br /><br />对于RSS数据源：<br />&lt;?xml version="1.0"?&gt;<br />&lt;rss version="0.92"&gt;<br />&lt;channel&gt;<br />  &lt;title&gt;Amazon: Books Arts &amp;amp; Photography&lt;/title&gt;<br />  &lt;link&gt;http://www.lockergnome.com/&lt;/link&gt;<br />  &lt;description&gt;Amazon RSS Feed&lt;/description&gt;<br />  &lt;lastBuildDate&gt;Sun, 29 Jun 2003 01:05:01 GMT&lt;/lastBuildDate&gt;<br />  &lt;docs&gt;http://www.lockergnome.com/&lt;/docs&gt;<br />  &lt;webMaster&gt;amazonfeed@lockergnome.com (Lockergnome RSS Generator)&lt;/webMaster&gt;<br />  &lt;item&gt;<br />    &lt;title&gt;The Artist's Way: A Spiritual Path to Higher Creativity - $11.17&lt;/title&gt;<br />    &lt;link&gt;http://www.amazon.com/exec/obidos/ASIN/1585421464/lockergnomedigit/?ref=nosim&amp;amp;dev-it=D34HUVGKB34YFX&lt;/link&gt;<br />    &lt;description&gt;http://www.lockergnome.com/    &lt;/description&gt;<br />  &lt;/item&gt;<br />  ...<br />&lt;/channel&gt;<br /><br />IndexRunner -i http://www.example.com/rss.xml -o c:\index -t title,description -n link  -l  4<br />-l 4 表示拿第4层节点作为字段映射，<br /><br />IndexRunner还提供了-a -m这两个选项：用于增量索引和批量索引优化。<br />-a  增量索引，表示在原有索引的基础上扩展<br />-m  mergeFactor 在Lucene中mergeFactor是一个针对批量索引的优化参数，控制多少条处理完多少条记录（Document）后，写入一次索引，写入频率越高，内存使用越少，但索引速度越慢，所以在大批量数据导入时需要增大文件写入的间隔，多让索引在内存中操作。<br /><br />搜索结果输出：<br /><br /><br />以下是系统设计过程中一些设计的思路：<br /><h2>做为工业标准的XML</h2>记得以前有关于肯德基的炸薯条断顿的报道。从这个事件报道中我们可以看到一种更高效的管理体系：对于快餐店这样全球性的企业来说，要保证各地提供的薯条品质，成本最低的方法肯定是依靠机器而不是厨师，如果要求薯条机能够处理各种形状不一的土豆，机器的复杂程度和维护成本都会很高。所以土豆必须严格符合工业标准才能让结构比较简单的薯条机生产出符合标准的薯条，因此，薯条的加工机械会严格按照土豆协会的土豆工业标准设计。高质量的原料可以大大降低后期加工设备的成本，因此从总体成本上讲还是合算的。 
<p>对于软件应用开发者来说：应用和应用之间，企业和企业之间交换的数据好比就是土豆，白菜，按照严格的XML标准设计的接口作为企业之间后台数据交换的工业标准，虽然不如简单的CSV格式高效，但缺能大大简化下游工序的后期加工成本。<br /></p><p>不难想象为什么处理HTML的浏览器：IE和Mozilla等浏览器软件大小都在10M以上，但一般处理XML的解析器一般都在几百K。除了没有界面外，HTML浏览器需要为太多不规范的HTML代码提供大量容错处理也是一个很重要的原因，而语法严格，规则简单的XML处理器就可以做的很简短，高效，体积越“小”就意味着适应性越广：这点在手机这样的硬件配置比较低的设备环境中显得尤其重要。</p><p>虽然XML在后台数据交换方面，有着巨大的潜力。在前台表现方面，XML并不会马上代替HTML，很多通过XSLT输出的HTML仍然需要结合CSS来进行表现。XML ==XSLT==&gt; HTML + CSS。但是由于太多的网页都是用HTML做的，相信XML没有必要马上代替这些已有的机制。<br /><br />此外在应用的国际化支持方面XML和Java简直是绝配：XML数据源用Java解析后是UNICODE，这样无论是日文，繁体中文还是德文的内容我们都可以在一个索引库中同时进行搜索。这样针对其他语言的支持只是设计各种语言界面的问题了。</p><pre>      GBK          \                                       / BIG5<br />      BIG5          -  UNICODE        ====&gt;       Unicode -  GB2312<br />      SJIS          -   (XML)                     (XML)   -  SJIS<br />      ISO-8859-1   /                                       \ ISO-8859-1</pre>使用XML的另外一个额外好处在于：开发人员一般都没有仔细理解Java的字符集（其实上是JVM的缺省file.encoding属性）受系统本地化设置的影响，基于XML的输入使得数据的字符解码过程变得透明：不用再和用户解释需要如何解码，编码数据源。不过，XML的学习成本还是比较高的，假设你HTML的学习成本是1，XML则可能为10，而XSLT的学习成本则可能高达100。<br /><h2>传统数据库应用的全文检索加速</h2><h3>让数据库负责精确匹配，将模糊匹配用独立的系统实现</h3>一个站点内容积累在万级以上，站内全文检索就会是用户定位最主要的手段，而关键词检索是用户最熟悉的方法。因此基于数据库的传统WEB应用在全文检索需求还是很大的。<br /><br />但是可怕的%like%数据库操作可能会吃掉数据库服务器90%以上的CPU。Oracle MSSQL等数据库服务器中数据库内置的全文检索基本上都不太适合WEB应用。而数据库另外一个的弊端在于对于条件简单的查询返回结果集非常大：数据库并不知道如何面向用户最关心的的头100条结果进行优化。根据以前的统计：头100条结果往往已经可以满足95％以上用户需求。<br /><br />需要缓存设计：根据我们的经验，在应用设计中没有必要进行内置的结果缓存设计：让前台的应用服务器内置的缓存机制或者反相代理缓存服务器进行缓存就够了。<br /><h3>数据同步策略</h3>总体上讲，全文检索和数据库其实是2种根本不同的应用模式，全文检索系统其实往往也没有必要和数据库那么高的实时同步机制，如果按照：低更新，高缓存的模式进行设计：数据库数据到全文索引的同步过程一般都可以通过脚本定期将数据库的数据导出成XML，然后进入Lucene的全文索引。而针对原有数据记录的更新和删除，其实一般可以通过定期的重建索引解决。WebLucene其中索引部分是一个IndexRunner的命令行程序实现的。<br /><h3>结果排序策略</h3>站内全文索引另外一个很重要的需求是可定制的排序：按时间，按价格，按点击量……Lucene全文索引缺省只提供了根据关键词在原文中的匹配度排序，而任何根据某个字段的值进行排序的都无法避免再次遍历数据，从而导致性能有数量级的下降（等于又是做%Like%检索），而在索引中，除了匹配度SCORE外，唯一能用来排序的就是索引记录的ID，所以一个比较高效率实现定制排序的方法时：在索引时，让进入Lucene全文的顺序对应着一定规则：比如时间，然后在搜索时，让搜索结果按照索引记录的ID进行排序（或倒排）。<br /><h3>搜索结果关键词标引的实现</h3>搜索结果中关键词通过红色或者黑体字标记出来，为了能够更恰当的显示相关上下文的问题，标引是通过限制了一个扫描范围，然后根据一个分析器将指定的词流式的读取出来，然后<br /><h2>全文检索和其他应用的集成</h2>其实核心的是一个Lucene的XML接口：SAX方式的数据导入和DOM方式的结果输出。<br /><br />XML的数据源定义：<br />只要是能够映射成表＝》记录＝》字段这样层次结构的都可以。因此WebLucene索引的设计比较灵活，甚至可以直接用来索引RSS。<br /><br />XML结果定义：参考了<a href="http://www.google.com/google.dtd">Google的XML接口的设计</a><br /><br />如果没有SERVLET界面，提供XML输出的DOMSearcher也可以很方便集成到各种应用系统中。<br /><a href="http://sourceforge.net/projects/weblucene/"><br /><p>参考资料：</p><p>系统设计中使用的一些模块：<br /></p><ul><li>Jakarta Lucene: <a href="http://jakarta.apache.org/lucene/">http://jakarta.apache.org/lucene/</a></li><li>Xerces / Xalan <a href="http://xml.apache.org/">http://xml.apache.org/</a><br /></li><li>Log4j <a href="http://jakarta.apache.org/log4j/">http://jakarta.apache.org/log4j/</a><br /></li><li>Google的XML接口定义： <a href="http://www.google.com/google.dtd">http://www.google.com/google.dtd</a></li></ul><p>其他开发人员的一些反馈和改进</p><ul><li><a href="http://www.taoer.com/2007/06/11/update-lucene-weblucene-note/" target="nw">将<strong>WebLucene</strong>中的lucene部分升级到2.1</a></li><li><a href="http://blog.donews.com/dev2dev/archive/2006/08/29/1021739.aspx">WebLucene安装实习篇 </a></li><li><a href="http://socolddai.spaces.live.com/Blog/cns!4A9992AF63EDFDDF!235.entry">WebLucene的安装经验 </a></li></ul><p>原帖:  <a class="permalink" href="http://www.chedong.com/tech/weblucene.html">http://www.chedong.com/tech/weblucene.html</a></p></a></div>
<img src ="http://www.blogjava.net/Yipak/aggbug/149846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yipak/" target="_blank">死神</a> 2007-09-30 12:29 <a href="http://www.blogjava.net/Yipak/articles/149846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>