`
lilin1030id
  • 浏览: 3232 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Nutch的search部分——Weight对象(针对query)的创建

 
阅读更多
在Nutch1.0中
Weight对象(针对query)的创建:在从IndexSearcher.search(Query, Filter, int) IndexSearcher.search(Weight, Filter, int)的过程中,Weight是通过Searcher.createWeight(Query)生成的(Query=>BooleanQuery,Searcher=>IndexSearcher),Query就是从IndexSearcher.search(Query, Filter, int)中传过来的Query。实际上Searcher.createWeight(Query)返回的是BooleanWeight,它是一个Weight(interface)的子类。在Searcher.createWeight(Query)中其实调用的是BooleanQuery.weight(Searcher searcher)(这个函数实际上在Query中定义的),而在这个函数中,其过程就比较复杂一下,具体包括:
  1)Query query = searcher.rewrite(BooleanQuery this):对当前的Query对象(实际上是BooleanQuery)进行重写操作。重写操作实际上主要是针对BooleanQuery对象而言的,在该对象中,有一个包含多个BooleanClause对象的clauses(ArrayList对象) 成员变量,重写主要目的就是对clauses包含的BooleanClause对象中的query对象根据相应情况进行boost值的重新设置。
2)Weight weight = query.createWeight(searcher):为query生成对应的权重。根据传进来的参数searcher(IndexSearcher对象)生成一个BooleanWeight对象。BooleanWeight是用于计算score的API,其包括search相似度(什么相似?)和一个weight(权重,应该是每个query都有一个权重,在计算最终结果的分值时就将这些权重考虑进去)。
3)float sum = weight.sumOfSquaredWeights():对所有的query的权重求和。实际上调用的是BooleanWeight.sumOfSquaredWeights(),通过这个函数得到所有query的weight的和,并将这个和乘以总query(应该是BooleanQuery对象)的boost的平方,再将结果(float)返回。
4)float norm = getSimilarity(searcher).queryNorm(sum):返回sum的平方根的倒数,即:1/sqrt(sum),其他什么事都没干。
5) weight.normalize(norm):自上而下的计算每个query的norm值。具体过程见图1。
以下图1可以标识query之间的一种计算关系(主要是父子query之间),其中每个Query的Sum值的计算都是依照从下到上的次序计算的,而norm值的计算则相反。其计算过程见图1,其中Si表示第i个query的Sum值,Qi表示第i个query。其中Norm代入TermQuery参数设置操作, 其对应代码(在TermQuery.normalize()中): 
this.queryNorm = queryNorm;
      queryWeight *= queryNorm;                    // normalize query weight      value = queryWeight * idf;                  // idf for document
而在TermQuery中,对Si的计算的相关代码为(在TermQuery.sumOfSquaredWeights()中):
queryWeight = idf * getBoost();             // compute query weight
      return queryWeight * queryWeight;           // square it
                《图贴不上……》
              图1 以BooleanQuery和TermQuery的组合为例
其中idf代表着该词的逆词频,这个值衡量了该词在整个文档库中出现的频度。这意味着,一个词出现的越少,根据香农的信息公示,他越珍稀。同时将贡献更多的分值给总分值。
分享到:
评论

相关推荐

    Nutch中文教程nutcher.zip

    Nutch教程——导入Nutch工程,执行完整爬取 Nutch流程控制源码详解(bin/crawl中文注释版) Nutch教程——URLNormalizer源码详解 Nutch参数配置——http.content.limit ...

    nutch部分网页乱码BUG修正

    然而,在实际使用过程中,由于编码问题,Nutch可能会出现部分网页乱码的情况。本篇文章将深入探讨这个问题,并提供具体的代码修复方案。 网页乱码通常是由于字符编码不匹配导致的。在Nutch中,当它抓取到不同编码...

    搭建nutch开发环境步骤

    1. 操作系统:Nutch可以在Linux、Mac OS X或Windows上运行,但推荐使用Linux环境,因为大部分Nutch用户和开发者都在这个平台上工作。 2. Java环境:Nutch依赖Java,因此需要安装JDK 8或更高版本,并确保`JAVA_HOME`...

    eclipse配置nutch,eclipse配置nutch

    #### 步骤1:创建Nutch项目 首先,在Eclipse中创建一个新的Java项目,选择“File > New > Project > Java project”,然后点击“Next”。在创建项目时,选择“Create project from existing source”,并指向你已经...

    nutch-1.5.1源码

    Nutch最初由Doug Cutting创建,后来成为了Hadoop项目的一部分,因为其在大数据处理和分布式计算方面的重要性。这个版本的源码包含了实现Web抓取、索引和搜索功能的全部Java代码,为开发者提供了深入理解搜索引擎工作...

    nutch_src 源码 tar—zip格式

    《Nutch源码分析——深入理解tar和zip格式》 Nutch是一款开源的网络爬虫项目,它在大数据处理和搜索引擎构建领域具有广泛的应用。本文将深入探讨如何获取和理解Nutch的源码,以及涉及的tar和zip两种常见的文件压缩...

    Nutch入门教程 高清 带书签

    通过阅读提供的“Nutch入门教程.pdf”,你可以学习如何安装Nutch、配置环境、创建并运行爬虫任务、查看抓取日志、分析抓取结果、调试插件等步骤,逐步掌握Nutch的使用。 总结来说,Nutch是一款强大的开源搜索引擎...

    nutch2.2.1安装步骤.docx

    例如,创建名为 `nutch_test` 的数据库,采用 `latin1` 字符集和 `latin1_swedish_ci` 排序规则。然后创建一个名为 `collection1_webpage` 的表,该表包含了网页的各种属性,如 ID、抓取时间、修改时间、内容等。 ...

    Apache Nutch 1.7 学习总结

    - 运行Nutch的基本命令,如抓取种子URL (`bin/nutch inject`), 分析网页 (`bin/nutch fetch`), 解析内容 (`bin/nutch parse`), 更新数据库 (`bin/nutch updatedb`),生成索引 (`bin/nutch index`). 5. **Nutch 与 ...

    nutch

    Nutch 与 Hadoop 密切相关,因为 Nutch 是 Hadoop 生态系统的一部分。Hadoop 提供了分布式计算框架,使得 Nutch 能够处理海量的网页数据。Nutch 利用 Hadoop MapReduce 进行分布式任务执行,同时,HBase 通常用于...

    nutch帮助文档;nutch学习 入门

    - **使用Solr或Elasticsearch**:Nutch可以将索引数据导出到Solr或Elasticsearch,以实现更强大的搜索功能。 - **学习源码**:深入阅读Nutch的源码,理解其内部机制和工作流程。 - **实践项目**:尝试建立自己的...

    nutch使用&Nutch;入门教程

    Nutch可以与Solr或Elasticsearch等搜索引擎集成,实现快速高效的搜索功能。此外,还可以与HBase等NoSQL数据库配合,用于大规模数据存储和检索。 七、实战教程 “Nutch使用.pdf”和“Nutch入门教程.pdf”这两份文档...

    nutch的插件机制

    Nutch 插件机制是其核心功能之一,它允许开发者轻松地扩展Nutch的功能,以适应不同的数据处理需求。Nutch 是一个开源的网络爬虫项目,主要用于收集、索引和搜索互联网上的信息。通过插件机制,Nutch可以处理各种不同...

    Nutch入门教程.pdf

    Nutch的基本组成包括爬虫(用于抓取网页内容)、索引器(用于处理数据并创建索引)和搜索组件(用于响应搜索请求并返回结果)。Nutch的主要工作流程包含爬取网页数据、解析网页内容、索引网页内容以及提供搜索接口供...

    Nutch插件开发文档

    接下来,我们将详细介绍如何创建一个新的Nutch插件。 1. **使用Eclipse创建Maven项目**:首先,需要在Eclipse环境中创建一个新的Maven项目。Maven是一个项目管理和综合工具,可以帮助管理项目的构建过程。 2. **...

    nutch入门.pdf

    在应用方面,提到了如何修改源码和使用插件机制(plugin),以及如何利用Nutch API和OpenSearch API接口。插件机制是Nutch灵活性的重要体现,它允许用户通过插件来扩展Nutch的功能。编写插件部分讲解了如何开发自己...

    Lucene nutch 搜索引擎 开发 实例 源码

    3. **查询解析**:QueryParser将用户的输入转换为内部可执行的Query对象,支持各种查询语法,如布尔运算符、短语查询等。 4. **搜索与评分**:使用Searcher,你可以执行查询并获取TopDocs,其中包含了匹配文档的...

    Nutch 解析器parse部分代码笔记

    ### Nutch解析器parse部分代码解析 #### 一、引言 在大数据处理与网络爬虫领域中,Apache Nutch 是一个高度可扩展且强大的框架,用于构建自定义化的网络爬虫系统。其中,解析器(Parser)是Nutch的重要组成部分之一...

Global site tag (gtag.js) - Google Analytics