<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>liulang&#039;s blog &#187; 搜索引擎</title>
	<atom:link href="http://www.liulang.cq.cn/category/search/feed" rel="self" type="application/rss+xml" />
	<link>http://www.liulang.cq.cn</link>
	<description>既然选择了远方，便只顾风雨兼程……</description>
	<lastBuildDate>Mon, 05 Dec 2011 15:49:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Nutch1.0导入Eclipse中配置运行</title>
		<link>http://www.liulang.cq.cn/20101202/nutch-eclipse.html</link>
		<comments>http://www.liulang.cq.cn/20101202/nutch-eclipse.html#comments</comments>
		<pubDate>Thu, 02 Dec 2010 14:25:47 +0000</pubDate>
		<dc:creator>刘 浪</dc:creator>
				<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://www.liulang.cq.cn/?p=284</guid>
		<description><![CDATA[&#60;1&#62;: 首先从http://nutch.apache.org/  下载最新的nutch.在这里我使用的是nutch1.0。 &#60;2&#62;: 在eclipse中新建立一个Java Project. 名字自己定义(Nutch). 选择”Create project from existing source”，指向自己nutch-1.0的目录. &#60;3&#62;: 点击下一步，切换到”Libraries”选择”Add Class Folder&#8230;” 按钮，从列表中选择”conf”.  &#8212;- Add project &#8216;conf&#8217; to build path&#8212;-&#62;Default Output floder &#8212;-&#62;选择刚才conf. &#60;4&#62;: finised.修改conf下面的 (a):nutch-defaul.xml : &#60;!&#8211; plugin properties &#8211;&#62; &#60;property&#62; &#60;name&#62;plugin.folders&#60;/name&#62; &#60;value&#62;/home/user/tools/nutch-1.0/src/plugin&#60;/value&#62; &#60;!&#8211;指向nutch1.0目录的plugin&#8211;&#62; &#60;description&#62;Directories &#8230; <a href="http://www.liulang.cq.cn/20101202/nutch-eclipse.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&lt;1&gt;: 首先从http://nutch.apache.org/  下载最新的nutch.在这里我使用的是nutch1.0。</p>
<p>&lt;2&gt;: 在eclipse中新建立一个Java Project. 名字自己定义(Nutch). 选择”Create project from existing source”，指向自己nutch-1.0的目录.</p>
<p>&lt;3&gt;: 点击下一步，切换到”Libraries”选择”Add Class Folder&#8230;” 按钮，从列表中选择”conf”.  &#8212;- Add project &#8216;conf&#8217; to build path&#8212;-&gt;Default Output floder &#8212;-&gt;选择刚才conf.</p>
<p><span id="more-284"></span>&lt;4&gt;: finised.修改conf下面的</p>
<p>(a):nutch-defaul.xml :</p>
<p>&lt;!&#8211; plugin properties &#8211;&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;plugin.folders&lt;/name&gt;</p>
<p>&lt;value&gt;/home/user/tools/nutch-1.0/src/plugin&lt;/value&gt;</p>
<p>&lt;!&#8211;指向nutch1.0目录的plugin&#8211;&gt;</p>
<p>&lt;description&gt;Directories where nutch plugins are located.  Each   element may be a relative or absolute path.  If absolute, it is used   as is.  If relative, it is searched for on the classpath.&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>(b):nutch-site.xml:</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;http.agent.name&lt;/name&gt;</p>
<p>&lt;value&gt;lance&lt;/value&gt;</p>
<p>&lt;description&gt;lance&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;http.agent.description&lt;/name&gt;</p>
<p>&lt;value&gt;Nutch spiderman&lt;/value&gt;</p>
<p>&lt;description&gt; Nutch spiderman&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;http.agent.url&lt;/name&gt;</p>
<p>&lt;value&gt;http://www.163.com/&lt;/value&gt;</p>
<p>&lt;description&gt;http://www.163.com&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;http.agent.email&lt;/name&gt;</p>
<p>&lt;value&gt;cqllang@163.com&lt;/value&gt;</p>
<p>&lt;description&gt;cqllang@163.com   &lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>(c):crawl-urlfilter.txt:</p>
<p># accept hosts in MY.DOMAIN.NAME</p>
<p>+^http://([a-z0-9]*\.)*163.com/</p>
<p>&lt;5&gt;:下载MP3跟rtf的jar文件</p>
<p><a href="http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/" target="_blank">http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/</a>，</p>
<p><a href="http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/" target="_blank">http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/</a></p>
<p>分别拷贝到src/plugin/parse-mp3/lib 和 src/plugin/parse-rtf/lib/文件夹下</p>
<p>&lt;6&gt;:刷新几下，右键选择工程文件夹，选择Build Path-&gt;Configure Build Path&#8230;在弹出的窗口上，切换到Libraries，选择Add Jars&#8230;，添加刚才下载的jar文件到工程。</p>
<p>&lt;7&gt;:到这一步，一般的工程都会有两个错误，nutch的official 1.0 release版本中，这两个问题因为licensing issues没有修复。</p>
<p>接下来的就是最关键的部分了。</p>
<p>修改&#8212;-  src\plugin\parse-rtf\src\java\org\apache\nutch\parse\rtf下RTFParseFactory.java</p>
<p>添加&#8212;&#8211; import org.apache.nutch.parse.ParseResult;</p>
<p>将  &#8212;&#8211; public Parse getParse(Content content) {</p>
<p>改为&#8212;- public ParseResult getParse(Content content) {</p>
<p>将  &#8212;- return new ParseStatus(ParseStatus.FAILED,</p>
<p>ParseStatus.FAILED_EXCEPTION,</p>
<p>e.toString()).getEmptyParse(conf);</p>
<p>改为&#8212;&#8211;return new ParseStatus(ParseStatus.FAILED,</p>
<p>ParseStatus.FAILED_EXCEPTION,</p>
<p>e.toString()).getEmptyParseResult(content.getUrl(), getConf());</p>
<p>将&#8212;&#8212;return new ParseImpl(text,</p>
<p>new ParseData(ParseStatus.STATUS_SUCCESS,</p>
<p>title,</p>
<p>OutlinkExtractor.getOutlinks(text, this.conf),</p>
<p>content.getMetadata(),</p>
<p>metadata));</p>
<p>改为&#8212;&#8212;return ParseResult.createParseResult(content.getUrl(),</p>
<p>new ParseImpl(text,</p>
<p>new ParseData(ParseStatus.STATUS_SUCCESS,</p>
<p>title,</p>
<p>OutlinkExtractor.getOutlinks(text, this.conf),</p>
<p>content.getMetadata(),</p>
<p>metadata)));</p>
<p>修改&#8212;&#8212;src\plugin\parse-rtf\src\test\org\apache\nutch\parse\rtf下的TestRTFParser.java</p>
<p>将&#8212;&#8211;parse = new ParseUtil(conf).parseByExtensionId(“parse-rtf”, content);</p>
<p>改为&#8212;-parse = new ParseUtil(conf).parseByExtensionId(“parse-rtf”, content).get(urlString); 到这一步，eclipse上面的工程就会没有错误了 .</p>
<p>&lt;8&gt;:在nutch1.0的目录下新建立一个文件夹urls,然后再在urls中建立一个文本文件url. 写上链接。注意后面要有 “/”. 选择Run-&gt;Run As-&gt;Java Application在弹出的Select Java Application上选择Crawl-org.apache.nutch.crawl. 接下来，选择 Run-&gt;Run Configurations…在左边的Java Application下面会有Crawl这一项，选择它， 切换到Arguments，Program Arguments的内容就是要设置的参数，填上urls -dir crawl -depth 3 -topN 50（这里视自己的具体情况而定，urls为链接） 在VM arguments下面填上-Dhadoop.log.dir=logs -Dhadoop.log.file=hadoop.log.</p>
<p>&lt;9&gt;:直接运行吧：看在你的控制台上出现信息了没.</p>
<p>PS:可能碰到的问题，就是Java Heap Size的问题，查看logs/hadoop.log或控制台输出，如果出现类似java.lang.OutOfMemoryError: Java heap space语句，</p>
<p>可以设置Eclipse -&gt; Window -&gt; Preferences -&gt; Java -&gt; Installed JREs -&gt; edit -&gt; Default VM arguments</p>
<p>设置为-Xms5m Xmx250m，其中Xms为最小内存，Xmx为最大内存。</p>
<p>另外我还碰到http.agent.name为null的错误。</p>
<p>将hadoop-site.xml 改成nutch-site.xml一样内容并删除crawl文件夹重新运行。</p>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="white-space: pre-wrap;"><br />
</span></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.liulang.cq.cn/20101202/nutch-eclipse.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compass文档笔记</title>
		<link>http://www.liulang.cq.cn/20090731/compassconfig.html</link>
		<comments>http://www.liulang.cq.cn/20090731/compassconfig.html#comments</comments>
		<pubDate>Fri, 31 Jul 2009 09:41:43 +0000</pubDate>
		<dc:creator>刘 浪</dc:creator>
				<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://www.liulang.cq.cn/?p=40</guid>
		<description><![CDATA[Compass是基于Lucene 的更高层的抽象，假如你正打算做关于搜索方面的模块的话，那我建议你使用Compass，他提供了可配置方案，而且比Lucene更加容易使用。如果你的系统中使用Spring， Hibernate，JDO， IBatis。。。 Compass是最好的选择，他能够非常方便的集成到现有系统中去。 1.   Compass的framework的系统结构。 感觉Compass的代码的结构简直就是剽窃Hibernate的，可能Compass的最初目的是用来整合Hibernate的， CompassConfiguration conf = new CompassConfiguration().configure().addClass(Author.class); Compass compass = conf.buildCompass(); CompassSession session = compass.openSession(); CompassTransaction tx = null; try { tx = session.beginTransaction(); &#8230; session.save(author); CompassHits hits = session.find(“jack london”); Author a = (Author) hits.data(0); Resource r = hits.getResource(0); &#8230; tx.commit(); } catch (CompassException ce) { if (tx != null) tx.rollback(); } finally { session.close(); } 假如你对Hibernate有了解的话，相信你对Compass会比较容易理解的，你可以把Hibernate的思想转移到Compass上。现在让我们看看他们之间的相似吧。 compass.cfg.xml &#60;compass-core-config xmlns=”http://www.opensymphony.com/compass/schema/core-config” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.opensymphony.com/compass/schema/core-config http://www.opensymphony.com/compass/schema/compass-core-config.xsd”&#62; &#60;compass name=”default”&#62; &#60;connection&#62; &#60;file path=”target/test-index”/&#62; &#60;/connection&#62; &#60;mappings&#62; &#60;class name=”test.Author” /&#62; &#60;/mappings&#62; &#60;/compass&#62; &#60;/compass-core-config&#62; 这个是Compass总的配置文件，其中定义了索引文件存储的位置（这里是用文件系统，Compass有多种选择，你也可以选数据库或其他），Compass索引的对象是面向PoJo的，这里的是Author，对应的文件是test/Author.cpm.xml. 当然这里面的配置属性不止这么多，更多的属性见Configure属性。 CompassConfiguration conf = new CompassConfiguration() &#8230; <a href="http://www.liulang.cq.cn/20090731/compassconfig.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Compass是基于Lucene 的更高层的抽象，假如你正打算做关于搜索方面的模块的话，那我建议你使用Compass，他提供了可配置方案，而且比Lucene更加容易使用。如果你的系统中使用Spring， Hibernate，JDO， IBatis。。。 Compass是最好的选择，他能够非常方便的集成到现有系统中去。</p>
<p><span id="more-40"></span></p>
<p>1.   Compass的framework的系统结构。</p>
<p>感觉Compass的代码的结构简直就是剽窃Hibernate的，可能Compass的最初目的是用来整合Hibernate的，</p>
<p>CompassConfiguration conf =</p>
<p>new CompassConfiguration().configure().addClass(Author.class);</p>
<p>Compass compass = conf.buildCompass();</p>
<p>CompassSession session = compass.openSession();</p>
<p>CompassTransaction tx = null;</p>
<p>try {</p>
<p>tx = session.beginTransaction();</p>
<p>&#8230;</p>
<p>session.save(author);</p>
<p>CompassHits hits = session.find(“jack london”);</p>
<p>Author a = (Author) hits.data(0);</p>
<p>Resource r = hits.getResource(0);</p>
<p>&#8230;</p>
<p>tx.commit();</p>
<p>} catch (CompassException ce) {</p>
<p>if (tx != null) tx.rollback();</p>
<p>} finally {</p>
<p>session.close();</p>
<p>}</p>
<p>假如你对Hibernate有了解的话，相信你对Compass会比较容易理解的，你可以把Hibernate的思想转移到Compass上。现在让我们看看他们之间的相似吧。</p>
<p>compass.cfg.xml</p>
<p>&lt;compass-core-config xmlns=”http://www.opensymphony.com/compass/schema/core-config”</p>
<p>xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”</p>
<p>xsi:schemaLocation=”http://www.opensymphony.com/compass/schema/core-config</p>
<p>http://www.opensymphony.com/compass/schema/compass-core-config.xsd”&gt;</p>
<p>&lt;compass name=”default”&gt;</p>
<p>&lt;connection&gt;</p>
<p>&lt;file path=”target/test-index”/&gt;</p>
<p>&lt;/connection&gt;</p>
<p>&lt;mappings&gt;</p>
<p>&lt;class name=”test.Author” /&gt;</p>
<p>&lt;/mappings&gt;</p>
<p>&lt;/compass&gt;</p>
<p>&lt;/compass-core-config&gt;</p>
<p>这个是Compass总的配置文件，其中定义了索引文件存储的位置（这里是用文件系统，Compass有多种选择，你也可以选数据库或其他），Compass索引的对象是面向PoJo的，这里的是Author，对应的文件是test/Author.cpm.xml.</p>
<p>当然这里面的配置属性不止这么多，更多的属性见Configure属性。</p>
<p>CompassConfiguration conf = new CompassConfiguration()</p>
<p>.setSetting(CompassEnvironment.CONNECTION, ”my/index/dir”)</p>
<p>.addResource(DublinCore.cmd.xml).addClass(Author.class);</p>
<p>Compass compass = conf.buildCompass();</p>
<p>这里我们CompassConfiguration会读取默认的在classpath中的compass.cfg.xml初始化，然后得到Compass对象，可能你会马上意思到这个Compass肯定对应于Hibenate中的SessionFactory，是的，这是一个重量级的对象，</p>
<p>我们需要通过这个对象得到CompassSession，然后进行CRUD操作，CompassSession跟Hibernate中的Session一样是个lightweight对象。关于对Search domain的配置(Author.cpm.xml),大家可以查看cpm文件配置。在那里面</p>
<p>主要是定义了那些properties是需要被索引的。</p>
<p>&lt;?xml version=”1.0&#8243;?&gt;</p>
<p>&lt;compass-core-mapping package=”eg”&gt;</p>
<p>&lt;class name=”Author” alias=”author”&gt;</p>
<p>&lt;id name=”id” /&gt;</p>
<p>&lt;constant&gt;</p>
<p>&lt;meta-data&gt;type&lt;/meta-data&gt;</p>
<p>&lt;meta-data-value&gt;person&lt;/meta-data-value&gt;</p>
<p>&lt;meta-data-value&gt;author&lt;/meta-data-value&gt;</p>
<p>&lt;/constant&gt;</p>
<p>&lt;property name=”name”&gt;</p>
<p>&lt;meta-data&gt;name&lt;/meta-data&gt;</p>
<p>&lt;meta-data&gt;authorName&lt;/meta-data&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=”birthday”&gt;</p>
<p>&lt;meta-data&gt;birthday&lt;/meta-data&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;component name=”books” ref-alias=”book” /&gt;</p>
<p>&lt;!&#8211; can be a reference instead of component</p>
<p>&lt;reference name=”books” ref-alias=”book” /&gt;</p>
<p>&#8211;&gt;</p>
<p>&lt;/class&gt;</p>
<p>&lt;class name=”Book” alias=”book”&gt;</p>
<p>&#8230;</p>
<p>&lt;/class&gt;</p>
<p>&lt;/compass-core-mapping&gt;</p>
<p>2.  索引文件结构</p>
<p>&#8212;[index dir]/index</p>
<p>|</p>
<p>|&#8211; [subIndex1]</p>
<p>|      |</p>
<p>|      |&#8212; segments</p>
<p>|      |&#8212; [segment1]</p>
<p>|      |&#8212; [segment2]</p>
<p>|</p>
<p>|&#8211; [subIndex2]</p>
<p>|      |</p>
<p>|      |&#8212; segments</p>
<p>|      |&#8212; [segment1]</p>
<p>|      |&#8212; [segment2]</p>
<p>|      |&#8212; [segment3]</p>
<p>|</p>
<p>&#8230;</p>
<p>基本上是一个search domain放到一个subIndex文件夹中，更确切的说是相同alias name的search domain放到相同的sub index folder中。</p>
<p>3.  Compass中的操作</p>
<p>通过CompassSession我们可以进行save，delete， get，load。假如我们有两个domain Object，Author 和 Book，假如我们想要query Book的话要怎样做呢？ 我们需要使用alias（这个属性定义在cmp文件中），</p>
<p>通过CompassQueryBuilder去构造CompassQuery, CompassQueryBuilder非常灵活，非常像Hibernate的Criteria查询。具体的sample请看 Working with objects</p>
<p>CompassHits hits = session.createQueryBuilder()</p>
<p>.queryString(“+name:jack +familyName:london”)</p>
<p>.setAnalyzer(“an1&#8243;) // use a different analyzer</p>
<p>.toQuery()</p>
<p>.addSort(“familyName”, CompassQuery.SortPropertyType.STRING)</p>
<p>.addSort(“birthdate”, CompassQuery.SortPropertyType.INT)</p>
<p>.hits();</p>
<p>4.  CompassGps and CompassGpsDevice</p>
<p>CompassGps像是一个Service，他需要在application startup时启动服务， application shutdown停止服务，CompassGpsDevice不能独立的存在，他需要依赖CompassGps， CompassGps为CompassGpsDevice提供</p>
<p>Compass对象，他们一起为程序提供Index的实时更新。 Compass整合Hibernate 等等 persitance framework的代码就在CompassGpsDevice里，你需要提供不同的Device，如HibernateDevice， JDODevice。你也</p>
<p>可以实现自己的Device， CompassGpsDevice会把domain object的更新事件通过CompassGps去通知Compass去更新索引文件，这样就是可以实时更新index了。有兴趣的话可以看看Hibernate3GpsDevice的</p>
<p>registerEventsForHibernate31（）方法，他给Hibernate的save，delete，update操作增加listener。当然我们可以使用aop自己去实现这块。CompassGps and CompassGpsDevice</p>
<p>Compass compass = &#8230; // configure compass</p>
<p>CompassGps gps = new SingleCompassGps(compass);</p>
<p>CompassGpsDevice device1 = &#8230; // configure the first device</p>
<p>device1.setName(“device1&#8243;);</p>
<p>gps.addDevice(device1);</p>
<p>CompassGpsDevice device2 = &#8230; // configure the second device</p>
<p>device2.setName(“device2&#8243;);</p>
<p>gps.addDevice(device2);</p>
<p>gps.start();</p>
<p>&#8230;.</p>
<p>&#8230;.</p>
<p>//on application shutdown</p>
<p>gps.stop();</p>
<p>5.  整合Spring，Hibenate</p>
<p>在Compass的lib里面就有非常好的一个sample了（petclinic），里面有对Spring，Hibenate的整合，其实对spring来说也就是通过ioc把CompassGps 和 Compass定义好。CompassGps主要负责re－index和index实时更新</p>
<p>， Compass主要提供了自定义Search部分的入口（CompassTemplate）。Spring提供了对Compass的DAO的整合，在CompassDaoSupport 中拿到CompassTemplate，这个跟spring对hibernatedao的支持是一致的。</p>
<p>public class LibraryCompassDao extends CompassDaoSupport {</p>
<p>public int getNumberOfHits(final String query) {</p>
<p>Integer numberOfHits = (Integer)getCompassTemplate().execute(</p>
<p>new CompassCallback() {</p>
<p>public Object doInCompass(CompassSession session) {</p>
<p>CompassHits hits = session.find(query);</p>
<p>return new Integer(hits.getLength());</p>
<p>}</p>
<p>}</p>
<p>);</p>
<p>}</p>
<p>return numberOfHits.intValue();</p>
<p>}</p>
<p>&lt;beans&gt;</p>
<p>&lt;bean id=”libraryCompass” class=”LibraryCompassDao”&gt;</p>
<p>&lt;property name=”compass”&gt;</p>
<p>&lt;ref local=”compass” /&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>&lt;!&#8211; COMPASS START &#8211;&gt;</p>
<p>&lt;bean id=”compass” class=”org.compass.spring.LocalCompassBean”&gt;</p>
<p>&lt;property name=”resourceLocations”&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;value&gt;classpath:org/compass/sample/petclinic/petclinic.cmd.xml&lt;/value&gt;</p>
<p>&lt;value&gt;classpath:petclinic.cpm.xml&lt;/value&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=”compassSettings”&gt;</p>
<p>&lt;props&gt;</p>
<p>&lt;prop key=”compass.engine.connection”&gt;file://${user.home}/compass/petclinic&lt;/prop&gt;</p>
<p>&lt;prop key=”compass.transaction.factory”&gt;org.compass.spring.transaction.SpringSyncTransactionFactory&lt;/prop&gt;</p>
<p>&lt;/props&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=”transactionManager”&gt;</p>
<p>&lt;ref local=”transactionManager” /&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=”hibernateGpsDevice” class=”org.compass.spring.device.hibernate.SpringHibernate3GpsDevice”&gt;</p>
<p>&lt;property name=”name”&gt;&lt;value&gt;hibernateDevice&lt;/value&gt;&lt;/property&gt;</p>
<p>&lt;property name=”sessionFactory”&gt;&lt;ref local=”sessionFactory” /&gt;&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=”compassGps” class=”org.compass.gps.impl.SingleCompassGps” init-method=”start” destroy-method=”stop”&gt;</p>
<p>&lt;property name=”compass”&gt;&lt;ref bean=”compass” /&gt;&lt;/property&gt;</p>
<p>&lt;property name=”gpsDevices”&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref local=”hibernateGpsDevice” /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;!&#8211; COMPASS END &#8211;&gt;</p>
<p>&lt;!&#8211; Transaction manager for a single Hibernate SessionFactory (alternative to JTA) &#8211;&gt;</p>
<p>&lt;bean id=”transactionManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”&gt;</p>
<p>&lt;property name=”sessionFactory”&gt;&lt;ref local=”sessionFactory”/&gt;&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;!&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-一下是对anototion的配置。&#8211;&gt;</p>
<p>&lt;bean id=”annotationConfiguration”</p>
<p>class=”org.compass.annotations.config.CompassAnnotationsConfiguration”&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;!&#8211; 核心Compass Bean,search及index时使用 &#8211;&gt;</p>
<p>&lt;bean id=”compass” class=”org.compass.spring.LocalCompassBean”&gt;</p>
<p>&lt;!&#8211; anontaition式设置         &#8211;&gt;</p>
<p>&lt;property name=”classMappings”&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;value&gt;com.dengyin.compass.sample.domain.Book&lt;/value&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=”compassConfiguration” ref=”annotationConfiguration”/&gt;</p>
<p>&lt;!&#8211; xml 文件式设置</p>
<p>&lt;property name=”resourceLocations”&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;value&gt;classpath:compass-springside.cmd.xml&lt;/value&gt;</p>
<p>&lt;value&gt;classpath:compass-springside.cpm.xml&lt;/value&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&#8211;&gt;</p>
<p>&lt;property name=”compassSettings”&gt;</p>
<p>&lt;props&gt;</p>
<p>&lt;prop key=”compass.engine.connection”&gt;</p>
<p>file://${user.home}/springside/compass</p>
<p>&lt;/prop&gt;</p>
<p>&lt;prop key=”compass.transaction.factory”&gt;</p>
<p>org.compass.spring.transaction.SpringSyncTransactionFactory</p>
<p>&lt;/prop&gt;</p>
<p>&lt;/props&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=”transactionManager” ref=”transactionManager”/&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;!&#8211;Compass的GPS绑定,在index时使用&#8211;&gt;</p>
<p>&lt;bean id=”compassGps” class=”org.compass.gps.impl.SingleCompassGps”</p>
<p>init-method=”start” destroy-method=”stop”&gt;</p>
<p>&lt;property name=”compass” ref=”compass”/&gt;</p>
<p>&lt;property name=”gpsDevices”&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;bean class=”org.compass.spring.device.hibernate.SpringHibernate3GpsDevice”&gt;</p>
<p>&lt;property name=”name”&gt;</p>
<p>&lt;value&gt;hibernateDevice&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=”sessionFactory” ref=”sessionFactory”/&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>ok! 相信你对Compass有一定的了解了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liulang.cq.cn/20090731/compassconfig.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nutch1.0配置笔记</title>
		<link>http://www.liulang.cq.cn/20090714/nutch1-0config.html</link>
		<comments>http://www.liulang.cq.cn/20090714/nutch1-0config.html#comments</comments>
		<pubDate>Tue, 14 Jul 2009 15:33:24 +0000</pubDate>
		<dc:creator>刘 浪</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://www.liulang.cq.cn/?p=12</guid>
		<description><![CDATA[配置软件： 1、 Java jdk-1.6 1.1 下载安装 from: http://www.sun.com 安装目录：C:\Java\jdk1.6.0_03 1.2 修改环境变量 JAVA_HOME=C:\Java\jdk1.6.0_03\bin CLASSPATH＝C:\Java\jdk1.6.0_03\lib\dt.jar；C:\Java\jdk1.6.0_03\lib\tools.jar 1.3 测试 java -version 2、tomcat-6.0 2.1 下载 from: http://tomcat.apache.org/ 2.2 解压到C盘目录并改名 安装目录：C:\tomcat6 2.3 修改配置 conf/server.xml QUOTE:   &#60;!&#8211; Define a non-SSL HTTP/1.1 Connector on port 8080 &#8211;&#62;     &#60;Connector port=”8080&#8243; maxHttpHeaderSize=”8192&#8243;             maxThreads=”150&#8243; minSpareThreads=”25&#8243; maxSpareThreads=”75&#8243;                enableLookups=”false” redirectPort=”8443&#8243; acceptCount=”100&#8243;                c disableUploadTimeout=”true”                URIEncoding=”UTF-8&#8243; useBodyEncodingForURI=”true” /&#62;      默认服务端口为8080，若有冲突（如Apache），则可通过此配置文件更改端口(蓝色)如果配置后nutch出现中文乱码问题，则增加编码配置(红色) 2.4 启动服务 startup 测试：http://localhost:8080/ 3、安装Cygwin from:http://www.cygwin.cn/ 由于运行Nutch自带的脚本命令需要Linux的环境，所以必须首先安装Cygwin来模拟这种环境 4、 nutch-1.0 4.1 下载 http://www.apache.org/dyn/closer.cgi/lucene/nutch/ 4.2  解压后到C盘根目录 C:\nutch-1.0 建 url.txt文件，指定爬取列表 在文件中写入如下内容： 例如：http://cqllang.javaeye.com/blog 4.3  指定爬虫规则 &#8230; <a href="http://www.liulang.cq.cn/20090714/nutch1-0config.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>配置软件：<br />
1、 Java jdk-1.6</p>
<p>1.1 下载安装</p>
<p>from: <a href="http://www.sun.com/">http://www.sun.com</a></p>
<p>安装目录：C:\Java\jdk1.6.0_03<br />
1.2 修改环境变量<br />
JAVA_HOME=C:\Java\jdk1.6.0_03\bin</p>
<p>CLASSPATH＝C:\Java\jdk1.6.0_03\lib\dt.jar；C:\Java\jdk1.6.0_03\lib\tools.jar<br />
1.3 测试<br />
java -version</p>
<p><img title="更多..." src="http://www.liulang.cq.cn/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><span id="more-12"></span></p>
<p>2、tomcat-6.0</p>
<p>2.1 下载<br />
from: <a href="http://tomcat.apache.org/">http://tomcat.apache.org/</a></p>
<p>2.2 解压到C盘目录并改名</p>
<p>安装目录：C:\tomcat6</p>
<p>2.3 修改配置<br />
conf/server.xml</p>
<p>QUOTE:</p>
<p>  &lt;!&#8211; Define a non-SSL HTTP/1.1 Connector on port 8080 &#8211;&gt;<br />
    &lt;Connector port=”8080&#8243; maxHttpHeaderSize=”8192&#8243;<br />
            maxThreads=”150&#8243; minSpareThreads=”25&#8243; maxSpareThreads=”75&#8243;<br />
               enableLookups=”false” redirectPort=”8443&#8243; acceptCount=”100&#8243;<br />
               c disableUploadTimeout=”true”<br />
               <span style="color: #ff0000;">URIEncoding=”UTF-8&#8243; useBodyEncodingForURI=”true”</span> /&gt;   </p>
<p> </p>
<p>默认服务端口为8080，若有冲突（如Apache），则可通过此配置文件更改端口(蓝色)如果配置后nutch出现中文乱码问题，则增加编码配置(红色)</p>
<p>2.4 启动服务<br />
startup</p>
<p>测试：<a href="http://localhost:8080/">http://localhost:8080/</a></p>
<p>3、安装Cygwin</p>
<p>from:<a href="http://www.cygwin.cn/">http://www.cygwin.cn/</a></p>
<p>由于运行Nutch自带的脚本命令需要Linux的环境，所以必须首先安装Cygwin来模拟这种环境<br />
4、 nutch-1.0<br />
4.1 下载 <a href="http://www.apache.org/dyn/closer.cgi/lucene/nutch/">http://www.apache.org/dyn/closer.cgi/lucene/nutch/</a><a href="http://lucene.apache.org/nutch/"></a></p>
<p>4.2  解压后到C盘根目录</p>
<p>C:\nutch-1.0</p>
<p>建 url.txt文件，指定爬取列表<br />
在文件中写入如下内容：<br />
例如：<a href="http://cqllang.javaeye.com/blog">http://cqllang.javaeye.com/blog</a><br />
4.3  指定爬虫规则<br />
修改 conf/crawl-urlfilter.txt</p>
<p> </p>
<p>QUOTE:</p>
<p># accept hosts in MY.DOMAIN.NAME<br />
#+^<a href="http://(/">http://(</a>[a-z0-9]*\.)*MY.DOMAIN.NAME/<br />
把这里改成你要的域名<br />
如 +^<a href="http://cqllang.javaeye.com/blog">http://cqllang.javaeye.com/blog</a></p>
<p> </p>
<p>4.4 修改 conf/nutch-site.xml</p>
<p>QUOTE:</p>
<p>&lt;configuration&gt;<br />
        &lt;property&gt;<br />
                &lt;name&gt;http.agent.name&lt;/name&gt;<br />
                &lt;value&gt;my nutch agent&lt;/value&gt;<br />
        &lt;/property&gt;<br />
        &lt;property&gt;<br />
                &lt;name&gt;http.agent.version&lt;/name&gt;<br />
                &lt;value&gt;1.0&lt;/value&gt;<br />
        &lt;/property&gt;<br />
&lt;/configuration&gt;</p>
<p>如果没有配置此agent，爬取时会出现 Agent name not configured! 的错误。</p>
<p>4.5 开始爬取</p>
<p>打开Cygwin,</p>
<p>在命令行窗口中输入：  <br />
 　　cd /cygdrive/c/nutch-1.0<br />
执行命令：</p>
<p>bin/nutch crawl url.txt -dir crawled -depth 3 -threads 4 &gt;&amp; crawl.log</p>
<p>在这里</p>
<p>dir指定抓取内容所存放的目录，depth表示以要抓取网站顶级网址为起点的爬行深度，threads指定并发的线程数。</p>
<p>4.6 部署web前端<br />
将 nutch-1.0.war 拷贝到webapps目录下<br />
通过浏览器访问<a href="http://localhost:8080/nutch-0.9/">http://localhost:8080/nutch-1.0/</a> 后，war包自解压。<br />
4.7 修改nutch的web配置<br />
c:\tomcat6\webapps\nutch-1.0\WEB-INF\classes\nutch-site.xml<br />
将内容更改为索引生成的目录。<br />
QUOTE:</p>
<p>&lt;nutch-conf&gt;<br />
        &lt;property&gt;<br />
                &lt;name&gt;searcher.dir&lt;/name&gt;<br />
                &lt;value&gt;c:/nutch-1.0/crawled&lt;/value&gt;<br />
        &lt;/property&gt;<br />
&lt;/nutch-conf&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liulang.cq.cn/20090714/nutch1-0config.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自己动手搭建搜索引擎(基于Nutch1.0)</title>
		<link>http://www.liulang.cq.cn/20090714/myselfconfignutch1-0.html</link>
		<comments>http://www.liulang.cq.cn/20090714/myselfconfignutch1-0.html#comments</comments>
		<pubDate>Tue, 14 Jul 2009 15:27:41 +0000</pubDate>
		<dc:creator>刘 浪</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://www.liulang.cq.cn/?p=7</guid>
		<description><![CDATA[网上发现很多关于Nutch配置搜索引擎的文章，但我觉得对于很多新手来说。配置的话有时往往不知如何下手，下面推荐两个视频。帮助大家可以一步一步搭建自己的搜索引擎。    自己动手搭建搜索引擎 &#8211; 1 在线观看： http://www.boobooke.com/v/bbk2817 自己动手搭建搜索引擎 &#8211; 2 在线观看： http://www.boobooke.com/v/bbk2818   希望能帮助入门。有兴趣的可能研究nutch1.0源码。]]></description>
			<content:encoded><![CDATA[<div>
<p>网上发现很多关于Nutch配置搜索引擎的文章，但我觉得对于很多新手来说。配置的话有时往往不知如何下手，下面推荐两个视频。帮助大家可以一步一步搭建自己的搜索引擎。</p>
<p>  </p>
<p>自己动手搭建搜索引擎 &#8211; 1</p>
<p>在线观看： <a href="http://www.boobooke.com/v/bbk2817" target="_blank">http://www.boobooke.com/v/bbk2817</a></p>
<p>自己动手搭建搜索引擎 &#8211; 2</p>
<p>在线观看： <a href="http://www.boobooke.com/v/bbk2818" target="_blank">http://www.boobooke.com/v/bbk2818</a></p>
<p> </p>
<p>希望能帮助入门。有兴趣的可能研究nutch1.0源码。</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.liulang.cq.cn/20090714/myselfconfignutch1-0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

