随笔分类 - 搜索引擎
摘要:solrconfig.xml文件包含了大部分的参数用来配置Solr本身的。Solrconfig.xml代码dataDirparameter:<dataDir>/var/data/solr</dataDir>用来指定一个替换原先在Solr目录下默认存放所有的索引数据,可以在Solr目录以外的任意目录中。如果复制使用后应该符合该参数。如果这个目录不是绝对路径的话,那么应该以当前的容器为相对路径。mainIndex:这个参数的值用来控制合并多个索引段。<useCompoundFile>:通过将很多Lucene内部文件整合到单一一个文件来减少使用中的文件的数量。这可
阅读全文
摘要:一、字段配置(schema)schema.xml位于solr/conf/目录下,类似于数据表配置文件,定义了加入索引的数据的数据类型,主要包括type、fields和其他的一些缺省设置。1、先来看下type节点,这里面定义FieldType子节点,包括name,class,positionIncrementGap等一些参数。name:就是这个FieldType的名称。class:指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。view plaincopy to clipboardprint?Java代码<schemaname=&qu
阅读全文
摘要:Solr的扩展(Scaling)当你的索引数量越来越大,你会发现你的搜索响应时间变得更慢,索引新内容的时间也会越来越长,那么,到了做出一些改变的时候了,幸运的是,solr很好的考虑到了这些情况,你只需要改变你的配置就可以了。以下将从三个方面讲述solr的scaling:l调优某个Solr服务器(Scale High)通过缓存和内存管理优化某个单实例的Solr。将Solr部署到一个拥有快速的CPU和硬件的专用服务器,通过调优,最大化的将单个服务器的性能达到最高。l使用多Solr服务器(Scale Wide)使用多Solr服务器。如果你的avgTimePerRequest参数在你可接受的范围内(数
阅读全文
摘要:打上SOLR-236_collapsing.patch补丁,实现 solr 搜索结果折叠、除去重复的搜索结果,可以实现类似google搜索结果的“站内的其它相关信息 ”。solr collapsing patch 是用 hash 某个字段来实现折叠重复结果的。下面我演示下应用这个补丁并搜索试用下。其实 solr 上已经有了这功能的实现:solr 1.3 collapse patch, 请看:https://issues.apache.org/jira/browse/SOLR-236,我这里下载是了新的:https://issues.apache.org/jira/secure/attach..
阅读全文
摘要:首先说一下lucene对文档的评分规则:score(q,d) = coord(q,d) ·queryNorm(q) ·∑(tf(t in d) ·idf(t)2·t.getBoost() ·norm(t,d))具体可以查看相关文章:http://blog.chenlb.com/2009/08/lucene-scoring-architecture.html这里先考虑三个因素coord(q,d)与tf(t in d),当查询串中,命中的词越多,coord计算的值则越大,某个词在文档中出现的次数越多则tf的值越大。还有就是norm(t,d),这个主
阅读全文
摘要:lucene对索引的更新比solr麻烦,solr只需要调用一个函数UpdateRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false)就完成了更新,而lucene需要先删除再更新,否则就变成增量索引了lucene更新索引:http://langhua9527.iteye.com/blog/582347前面已经简单介绍了solr的安装与使用,下面来看看如何用客户端solrj来建立索引及查询view plainimportjava.io.IOException;importjava.util.ArrayList;imp
阅读全文
摘要:拜读了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
阅读全文
摘要:下面是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
阅读全文
摘要:1. bin/nutch parse这个命令主要是用来解析抓取的内容,对其进行外链接分析,计算分数等操作,这个解析在抓取的时候就可以设置是否进行,如果在抓取的时候没有设置解析抓取的网页内容,那这边可以单独用一个Map-Reduce任务来做。后面的参数为:Usage: ParseSegment segment这里是一个segment的目录名2. ParseSegment源代码分析2.1 任务的启动ParseSegment任务的启动也是用一个Map-Reduce任务的,下面是它的源代码//配置一个JobJobConfjob=newNutchJob(getConf());job.setJobName
阅读全文
摘要:这里主要看一下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
阅读全文
摘要:上一节看了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
阅读全文
摘要:1. Fetcher模块的简单介绍Fetcher这个模块在Nutch中有单独一个包在实现,在org.apache.nutch.fetcher,其中有Fetcher.java, FetcherOutput 和FetcherOutputFormat来组成,看上去很简单,但其中使用到了多线程,多线程的生产者与消费者模型,MapReduce的多路径输出等方法。下面我们来看一下Fetcher的注释,从中我们可以得到很多有用的信息。首先,这是一种基于队列的fetcher方法,它使用了一种经典的线程模型,生产者(a-QueueFeeder)与消费者(many-FetcherThread)模型,注意,这里有多
阅读全文

浙公网安备 33010602011771号