(一)Lucene学习笔记

本文介绍了Lucene搜索引擎的工作原理,包括文档索引、搜索过程中的关键类和方法。详细探讨了IndexWriter、Directory、Analyzer、Document及Field的作用,以及IndexSearcher、Term、Query、TopDocs在搜索过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容 -> 文档

文档 -> 标签(标题、正文、摘要、作者、链接)

建立文档 -> 文档分析 -> 文档索引

搜索质量只有有两个考量方面:查准率和查全率。

查准率是系统过滤非相关文档的能力。

查全率是系统查找相关文档的能力。

常见的搜索理论模型有以下三个:

  • 纯布尔模型:一条查询仅获取所有匹配的文档集合。
  • 向量空间模型:查询语句和文档都是高维空间的向量,这里每一个独立的项都是一个维度。查询语句和文档之间的相关性由各自向量之间的距离计算得到。
  • 概率模型:采用全概率方法来计算文档和查询语句的匹配概率。

设计分布式存储系统的原则是,让计算尽可能地靠近数据。

搜索范围有两种界定方式:净处理内容和净处理吞吐量。

如果要处理的数据流较大,你必须将这些数据分割成各个小部分,以便让多台分离的计算机分别搜索对应部分,然后再将各个部分的搜索的结果集合并成总结果集。

如果要有较高的搜索吞吐量,那么就必须将同一索引复制到多个计算机上,再通过负载均衡来让负载最小的机器处理查询请求。

lucene是搜索核心工具包。

索引过程核心类

执行简单的索引过程的时候一般会涉及到以下几个类:

  • IndexWriter
  • Directory
  • Analyzer
  • Document
  • Field

IndexWriter

IndexWriter是索引过程中的核心组件。这个类负责创建新索引或者打开已有索引,以及向索引中添加、删除或更新被索引文档的信息。可以把IndexWriter看做这样一个对象,它为你提供针对索引文件的写入操作,但不能用于读取或搜索索引。IndexWriter需要一定空间来存储索引,该功能可以由Directory完成。IndexWriter不能直接索引文本,需要先由Analyzer将文本分割成独立的单词。

Directory

Directory类描述了Lucene索引的存放位置。它是一个抽象类,它的子类负责具体指定索引的存储路径。

Analyzer

文本文件被处理前,需要经过Analyzer处理。Analyzer是由IndexWriter的构造方法来指定的,它负责从被索引文本中提取语汇单元。

Document

Document(文档)对象代表一些域的集合。你可以将Document对象理解为类似于Web页面、E-mail信息或者文本文件的语义抽象。在Lucene中,所关心的是从二进制问你当中提取的以Field形式出现的文本(如作者、标题、主题和修改日期等),并把这些文档的不同域单独存储作为索引。

这里的Document类要和Document(文档格式如pdf,word)区分开来。

Document对象的结构比较简单,为一个包含多个Field对象的容器;Field是指包含能被索引的文本内容的类。

Field

索引中的每个文档都包含一个或多个不同命名的域,这些域包含在Field类中。每个域都有一个域名和对应的域值,以及一组选项(操作符?)来精确控制Lucene索引操作各个域值。文档可能拥有不止一个同名的域。在这种情况下,域的值就按照索引操作顺序添加进去。作为一个文本域来处理。

搜索过程中的核心类

  • IndexSearcher
  • Term
  • Query
  • TermQuery
  • TopDocs

IndexSearcher

IndexSearcher类用于搜索由IndexWriter类创建的索引,它是连接索引的中心环节。可以将IndexSearcher类看做一个以只读方式打开索引的类。它需要利用Directory实例来掌控前期创建的索引,然后才能提供大量的搜索方法。

其中最简单的搜索方法是将单个Query对象和int topN计数作为该方法的参数,并返回一个TopDocs对象。

Term

Term对象是搜索功能的基本单元。与Field对象类似,Term对象包含一对字符串元素:域名和文本值。

Query

Lucene含有许多具体的Query(查询)子类。到目前为止,我们谈到的只是Lucene基本的Query子类:TermQuery类。

TermQuery

TermQuery是Lucene提供的最基本的查询类型,也是简单查询类型之一。它用来匹配指定域中包含特定项的文档。

TopDocs

TopDocs是一个简单的指针容器,指针一般指向前N个排名的搜索结果,指针一般执行前N个排名的搜索结果。搜索结果即是匹配条件的文档。TopDocs会记录前N个结果中每个结果的int docID(可以用它来获取文档)和浮点分数。

转载于:https://juejin.im/post/5ba1ab485188255c72283dd8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值