热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lucene初探之数据格式详情(五)

Lucene初探之数据格式详情(五)在前几篇文章中我们了解了索引文件中关于索引的正向信息和反向信息的存储格式。除了正向信息和反向信息之外,还有一种不可或缺的信息也保存在索引文件中–索引

Lucene初探之数据格式详情(五)

在前几篇文章中我们了解了索引文件中关于索引的正向信息和反向信息的存储格式。除了正向信息和反向信息之外,还有一种不可或缺的信息也保存在索引文件中–索引因子。

我们在开篇几张中介绍索引的搜索过程时,提到搜索引擎在将用户的查询关键词和倒序索引表进行比对,然后取出所有命中的文档之后,为了将最符合用户预期的文档展示在用户第一眼就看到的地方,需要对文档进行打分,计算文档和用户的query语句之间的相关性权重,权重越高的文档会越往前排序。在进行相关性权重打分计算的时候,我们使用的是向量空间模型对文档进行相关性打分,在计算相关性之前,需要先计算Term weight,这表示一个term相对其所对应的文档的重要性。

在计算Term weight时,主要有两个影响因素,一个是此Term在此文档中出现的次数,还有一个是此Term在所有文档中的出现频次,也就是普通程度。一个Term在文档中出现的次数越多,则其相对于此文档的重要性越高。

这种Term weight计算方式是最普通的计算方式,其存在以下几个问题:

  • 不同的文档重要性不同,有的文档重要一点,有的文档不是那么重要,比如对于一个软件相关的行业的用户,可能他想要和软件相关的文档排在前面一点,而和文学相关的文档排在后面一点;再比如对于一家旅游网站而言,搜索出来的信息应该都是和旅游相关的排在最前面,而其他一些无关紧要的其他行业的文档在搜索结果中排在后面一点。
  • 不同的域重要性不同,有的域重要一点,比如标题,关键词,tag标签等,而有的域则相关不是那么重要,或者说是无关紧要,比如附件等。同一个词,其出现在标题中绝对比出现在文末的结尾一句话中要重要得多。
  • 根据词在文档中出现的频次来进行Term weight打分,其中一个不合理的地方在于:篇幅长的文档相比篇幅短的文档而言计算词在文档中出现的次数时要占有优势。

由于以上的一些缺陷和一些其他的考量因素,Lucene在计算Term weight时会乘上一个标准因子来减少上面三个因素的影响。

标准化因子对打分计算有直接的影响,Lucene的打分计算的过程一部分是发生在索引的过程中,包括标准化因子,另一部分发生在搜索的过程中,后面我们会有详细的讲解。

标准化因子在索引的过程中总的计算如下:

其中:

  • Document boost:此值越大,说明此文档的重要性越高;
  • Field boost:此值越大,说明此域越重要;
  • lengthNorm(field) = 1.0/Math.sqrt(numTerms);一个域中包含的Term总数越多,也就是文档篇幅越长,此值越小;

从上面的公式中,我们可以知道,一个词在不同的文档和不同的域中的重要性不同。
比如有两个文档,每个文档两个域,忽略掉文档的长度的话,它们的组合有四种:重要文档的重要域,重要文档的非重要域……每种组合的标准化因子不同。

Lucene中的标准化因子一共保存了(DocumentNum * FieledNum)种,其格式如下:

  • 标准化因子文件:nrm
    -NormsHeader:字符串“NRM” 外加version;
    -NumField个Norms,一个域对应一项;
    -Norms本身是一个byte数组,个数为segment size,其每一个Byte表示一个浮点数;

推荐阅读
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • Spring Boot与Graylog集成实现微服务日志聚合与分析
    本文介绍了如何在Graylog中配置输入源,并详细说明了Spring Boot项目中集成Graylog的日志聚合和分析方法,包括logback.xml的多环境配置。 ... [详细]
  • (1)XML预处理读取test.xml并修改url节点下的localhost信息,以保证预览和下载用户所需正确资源。过程如下: ... [详细]
  • 来看看倒排索引压缩。压缩是拿CPU换IO的最重要手段之一,不论索引是放在硬盘还是内存中。索引压缩的算法有几十种,跟文本压缩不同,索引压缩算法不仅仅需要考虑压缩率,更要考虑压缩和解压 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • Lucene 4.2.1入门教程之查询构造
    为什么80%的码农都做不了架构师?本文介绍了Lucene查询构造的几种方法。1.查询方式简介查询构造的方法主要有两种,第一种是Query,另外一种 ... [详细]
  • datetime 索引_【免费毕设】ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)...
    点击上方“蓝字”关注我们目录系统设计4.1搜索引擎模型模型包括爬虫、索引生成、查询以及系统配置部分。爬虫包括:网页抓取模块、网页减肥模块、爬虫维持模块。索引生成包括& ... [详细]
author-avatar
Nicole-sasanh_880
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有