10 2011 档案
摘要:拜读了solr的部分源码,却急于弄明白solr的索引顺序和查询顺序,如下是探访结果. 所有的配置都在solr/example/solr/conf/schema.xml当中. 1 <!-- 如下是对text类型的处理 --> 2 <fieldTypename="text"class="solr.TextField"positionIncrementGap="100"autoGeneratePhraseQueries="true"> 3 <!-- 索引顺序1空格2同义词3过滤词4拆字5小写
阅读全文
摘要:好久没写博客了。近期在用solr做一套系统,期间有不少心得尚未记录。这里先记录一下solr中自定义QParser如何与SynonymFilter和RemoveDuplicatesTokenFilter配合以实现检索时Token同义词扩展与Token去重。起初按照solr wiki上的说明,在schema.xml里配置了如下filter:1<analyzer type="query"> 2<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLengt
阅读全文
摘要:前言 欢迎来到Apache Shiro 10分钟之旅! 希望通过这个简单、快速的示例,可以让你对应用程序中使用Shiro有个深入的了解。嗯,10分钟你应该可以搞定它。 概述 Apache Shiro是什么? Apache Shiro一个功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。 实际上,Shiro的主要功能是管理应用程序中与安全相关的全部,同时尽可能支持多种实现方法。Shiro是建立在完善的接口驱动设计和面向对象原则之上的,支持各种自定义行为。Shiro提供的默认实现,使其能完成与其他安全框架同样的功能,这不也是我们一直努力想要
阅读全文
摘要:下面是Google翻译的http://wiki.apache.org/nutch/NewScoring内容,是关于Nutch 新的链接分数算法的说明,有点类似于Google的PageRank,这里有其运行的一个例子http://wiki.apache.org/nutch/NewScoringIndexingExample。本页面描述了修订723441新的计分(即WebGraph链接分析)Nutch的功能。又见新的得分例如。目录一般资料WebGraph循环LinkRankScoreUpdater问题如果不忽略内部链接,将LinkRank分数相当于PageRank的分数呢?一般资料新的评分功能
阅读全文
摘要:Nutch 2.0 的主要一些变化1. Storage Abstraction initially with back end implementations for HBase and HDFS extend it to other storages later e.g. MySQL etc... 这里说的是一个存储层的抽象,因为原来nutch的链接与数据的存储都是在HDFS上的,新的Nutch 2.0准备把存储层进行抽象,使用的是新的NoSql的ORM框架,叫做GORA,下面地址中有其说明http://wiki.apache.org/nutch/GORA_HBase,主页在http://i
阅读全文
摘要:1. 一些对象说明PluginRepository:这是一个用于存储所有插件描述对象(PluginDescriptor),插件扩展点(ExtensionPoint)和被激活的插件。PluginDescriptor:用于描述单个扩展插件的元信息,它的内容主要是从plugin.xml中得到。Plugin: 用于描述插件的一个抽象,其中包括了一个插件描述符,它们是一对一的关系。ExtensionPoint: 这个扩展点主要是一个面象对象中的接口的意思,就是说可以有多个扩展来实现这个接口,一个或者多个扩展点实际上就是一个插件,如nutch-extensionpoints. Extension: 扩展是
阅读全文
摘要:1. Nutch 1.3 的页面评分机制 Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是作为Nutch中ScoreFilter扩展点的一个扩展来实现的,而新的LinkRank算法有一个叫做org.apache.nutch.scoring.webgraph的包来对网页进行分数计算,它可以解决OPIC解决不了的问题,一个是重复地抓取页面,会引起那些被抓取的页面重要性增加;另一个是同时新添加的页面必须进行抓取,这样会使整个网络的总cash流通量增加,这样会造成那些没有重复抓取的页面重要性降
阅读全文
摘要:在Nutch中,大量的可扩展的部分都使用了插件来做,如网页下载时所用的协议选择,解析不同类型的网页,url的过滤和规范化都使用了Nutch的插件机制。 Nutch中插件的主要目标是: 可扩展性:用户可以通过实现相应的接口来生成自己的扩展插件 灵活性:任务人都可以参与插件的编写。 可维护性:插件的开发者只要实现相应的扩展接口,而不需要关注插件的内部原理。 下面对其原理和代码做一个简单的分析。1. 一些概念1.1 插件仓库(PluginRepository) 插件仓库是一个所有插件的注册器,在系统启动时,这个仓库是通过分析插件目录中所有插件的mainfest文件来生成。对于每一个插件都会生成一个插
阅读全文
摘要:1. 自己扩展一个简单的插件 这里扩展一个Nutch的URLFilter插件,叫MyURLFilter 1.1 生成一个Package 首先生成一个与urlfilter-regex类似的包结构如org.apache.nutch.urlfilter.my 1.2 在这个包中生成相应的扩展文件 再生成一个MyURLFilter.java文件,内容如下: packageorg.apache.nutch.urlfilter.my; importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamRe...
阅读全文
摘要:新的Nutch使用了Solr来做了后台的索引服务,nutch正在努力与Solr进行更方便的整合,它很好的与Solr处理了耦合关系,把Solr当成一个服务,Nutch只要调用其客户端就可以与其进行通讯。1. bin/nutch solrindex 这个命令是用来对抓取下来的内容建立索引,帮助如下: Usage:SolrIndexer<solrurl><crawldb><linkdb>(<segment>...|-dir<segments>) 这里我们可以看到第一个参数为<solr url>,这是solr服务的一个地址,第二个
阅读全文
摘要:这里主要是分析一下org.apache.nutch.crawl.LinkDb,它主要是用计算反向链接。1. 运行命令 bin/nutch invertlinks帮助参数说明:Usage:LinkDb<linkdb>(-dir<segmentsDir>|<seg1><seg2>...)[-force][-noNormalize][-noFilter]linkdboutputLinkDbtocreateorupdate-dirsegmentsDirparentdirectoryofseveralsegments,ORseg1seg2...listof
阅读全文
摘要:这里主要看一下CrawlDb中的updatedb,它主要是用来更新CrawlDb数据库的1. bin/nutch updatedb我们用nutch的命令行时会看到一个方法叫updatedb,其实这个方法就是调用CrawlDb.java类中的update方法,它的参数帮助如下:Usage:CrawlDb<crawldb>(-dir<segments>|<seg1><seg2>...)[-force][-normalize][-filter][-noAdditions]crawldbCrawlDbtoupdate-dirsegmentsparentd
阅读全文
摘要:1. bin/nutch parse这个命令主要是用来解析抓取的内容,对其进行外链接分析,计算分数等操作,这个解析在抓取的时候就可以设置是否进行,如果在抓取的时候没有设置解析抓取的网页内容,那这边可以单独用一个Map-Reduce任务来做。后面的参数为:Usage: ParseSegment segment这里是一个segment的目录名2. ParseSegment源代码分析2.1 任务的启动ParseSegment任务的启动也是用一个Map-Reduce任务的,下面是它的源代码//配置一个JobJobConfjob=newNutchJob(getConf());job.setJobName
阅读全文
摘要:1. Fetcher模块的简单介绍Fetcher这个模块在Nutch中有单独一个包在实现,在org.apache.nutch.fetcher,其中有Fetcher.java, FetcherOutput 和FetcherOutputFormat来组成,看上去很简单,但其中使用到了多线程,多线程的生产者与消费者模型,MapReduce的多路径输出等方法。下面我们来看一下Fetcher的注释,从中我们可以得到很多有用的信息。首先,这是一种基于队列的fetcher方法,它使用了一种经典的线程模型,生产者(a-QueueFeeder)与消费者(many-FetcherThread)模型,注意,这里有多
阅读全文
摘要:上一节看了Fetcher中主要几个类的实现,这一节会来分析一下其中用到的消费者FetcherThread,来看看它是干嘛的。1. Fetcher的Mapp模型Fetcher.java代码中可以看到,Fetcher继承自MapRunable,它是Mapper的抽象接口,实现这个接口的子类能够更好的对Map的流程进行控制,包括多线程与异步Maper。1.1 Fetcher的入口函数fetch(Path segment,int threads, boolean parsing)下面是它的源代码,来分析一下://对配置进行检测,看一些必要的配置是否已经配置了,如http.agent.name等参数ch
阅读全文
摘要:前面我们看了一下Generate的流程,它是为Fetch产生相应的fetchlist,这里想介绍一下Segment的查看工具SegmentReader类。1. 命令介绍bin/nutchreadsegUsage:SegmentReader(-dump...|-list...|-get...)[generaloptions]// 这里是一般的参数说明*Generaloptions:-nocontentignorecontentdirectory-nofetchignorecrawl_fetchdirectory-nogenerateignorecrawl_generatedirectory-no
阅读全文
摘要:1. Generate的作用 在Inject之后就是Generate,这个方法主要是从CrawlDb中产生一个Fetch可以抓取的url集合(fetchlist),再结合一定的过滤条件,它的命令行如下: bin/nutchgenerateUsage:Generator<crawldb><segments_dir>[-force][-topNN][-numFetchersnumFetchers][-adddaysnumDays][-noFilter][-noNorm][-maxNumSegmentsnum] 参数说明: * crawldb: crawldb的相对路径 *
阅读全文
摘要:上次我们分析了Inject的整个流程,其中说到了Inject的输出格式是MapSequenceFileOutputFormat,这个格式可以使用一个叫CrawlDbReader的工具来读取和分析。下面我们就来分析一下这个工具有哪些用。1. CrawlDbReader工具的使用方法 在命令行中运行bin/nutch readdb后就可以看到其帮助,实际上这个shell方法调用的正是CrawlDbReader的main方法,这个工具有下面几种使用方法: * bin/nutch <crawldb> -stats -sort 这个方法是在终端中打印所有crawldb的统计信息,加上sort
阅读全文
摘要:1. Inject是干嘛的?在Nutch中Inject是用来把文本格式的url列表注入到抓取数据库中,一般是用来引导系统的初始化。这里的文本格式如下:http://www.nutch.org/\tnutch.score=10\tnutch.fetchInterval=2592000\tuserType=open_source这里的url与其元数据之间用Tab隔开,这里有两个保留的元数据,如下nutch.score : 表示特定url的分数nutch.fetchInterval : 表示特定url的抓取间隔,单位为毫秒Inject注入后生成的数据库为二进制结构,是Hadoop的MapSequen
阅读全文
摘要:1. Nutch 1.3 运行命令的一些介绍 要看Nutch的命令说明,可执行如下命令bin/nutchUsage:nutch[-core]COMMANDwhereCOMMANDisoneof:crawlone-stepcrawlerforintranetsreaddbread/dumpcrawldbconvdbconvertcrawldbfrompre-0.9formatmergedbmergecrawldb-s,withoptionalfilteringreadlinkdbread/dumplinkdbinjectinjectnewurlsintothedatabasegeneratege
阅读全文
摘要:1. Nutch是什么? Nutch是一个开源的网页抓取工具,主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的接口来对其网页数据进行查询的一套工具。其底层使用了Hadoop来做分布式计算与存储,索引使用了Solr分布式索引框架来做,Solr是一个开源的全文索引框架,从Nutch 1.3开始,其集成了这个索引架构2. 在哪里要可以下载到最新的Nutch?在下面地址中可以下载到最新的Nutch 1.3二进制包和源代码http://mirror.bjtu.edu.cn/apache//nutch/3. 如何配置Nutch? 3.1 对下载后的压缩包进行解压,然后cd $HOME/nut
阅读全文
摘要:目录 Apache Nutch 1.3 学习笔记一 Apache Nutch 1.3 学习笔记二 Apache Nutch 1.3 学习笔记三(Inject) Apache Nutch 1.3 学习笔记三( Inject CrawlDB Reader) Apache Nutch 1.3 学习笔记四(Generate) Apache Nutch 1.3 学习笔记四(SegmentReader分析) Apache Nutch 1.3 学习笔记五(FetchThread) Apache Nutch 1.3 学习笔记五(Fetcher流程) Apache Nutch 1.3 学习笔记六(ParseSe
阅读全文
摘要:在尝试保护你的应用时,你是否有过挫败感?是否觉得现有的Java安全解决方案难以使用,只会让你更糊涂?本文介绍的Apache Shiro,是一个不同寻常的Java安全框架,为保护应用提供了简单而强大的方法。本文还解释了Apache Shiro的项目目标、架构理念以及如何使用Shiro为应用安全保驾护航。什么是Apache Shiro?Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。Shiro为解决下列问题(..
阅读全文
摘要:Lucene3.0之结果排序(原理篇)传统上,人们将信息检索系统返回结果的排序称为"相关排序"(relevance ranking),隐含其中各条目的顺序反映结果和查询的相关程度。 1、基本排序原理①向量空间模型Gerald Salton等在30多年前提出的"向量空间模型"(Vector Space Model,VSM)[Salton and Lesk,1968, Salton,1971]。该模型的基础是如下假设:文档d和查询q的相关性可以由它们包含的共有词汇情况来刻画。 经典的TF*IDF词项权重的计算公式: 给定某种权重的定量设计,求文档和查询的相关
阅读全文
摘要:有关Lucene的Payload的相关内容,可以参考如下链接,介绍的非常详细,值得参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-lucene-pl/http://www.lucidimagination.com/blog/2009/08/05/getting-started-with-payloads/ 例如,有这样的一个需求:现在有两篇文档内容非常相似,如下所示:文档1:egg tomato potato bread 文档2:egg book potato bread 现在我想要查询食物(foods),而且是查询关键词是..
阅读全文
摘要:介绍:Apache Lucene 是一个基于 Java 的全文检索工具包,你可以利用它来为你的应用程序加入索引和检索功能。Lucene 目前是著名的 Apache Jakarta 家族中的一个开源项目,也是目前最为流行的基于 Java 开源全文检索工具包。 第一部分:概述我们在很多地方都可以看到搜索功能Windows系统中的有搜索功能:打开"我的电脑",按"F3"就可以使用查找的功能,查找指定的文件或文件夹。搜索的范围是整个电脑中的文件资源。Eclipse中的帮助子系统:点击HelpàHelp Contents,可以查找出相关的帮助信息。搜索的
阅读全文