Lucene学习笔记(1)

简介:
Lucene学习笔记
可以搜索文本文件,理论上可以搜索任何类型的数据。只要先把数据转化为文本,就可以对数据进行索引和搜索。
使用了反向索引的机制,维护一个词/短语的表,对于每个词和短语都有一个链表描述有哪些文档包含这个词和短语。这样用户输入查询条件的时候,搜索引擎先对输入的条件分词,分成词和短语,然后到建立好的索引上面查找,最终返回索引相关的文档。
1、首先对文档进行分词。
2、然后将分词的结果进行索引的创建。
结构化数据:数据库数据,元数据
半结构化数据:xml、html
非结构化数据:全文数据,word文档,email
全文检索:新建立索引,在进行搜索。
建立索引
1、准备文档
2、将文档传给分词组件tokenizer
a) 将文档分成一个个的单词
b) 去除标点
c) 利用停词集合,去除停词(最普通的词,没有任何意义,英文中的the,a,this等等)
d) 得到词元token
3、将词元token传给语言处理组件linguistic processor
a) 变为小写
b) 将单词缩减为词根形式,如cars到car,drove到drive,前者是缩减,后者是转变。前者给予某种算法,例如去除s,去除ing添加e等等,后者基于字典做转变就可以了。这两种方法不是互斥的,有交集,有的词汇用两种方法都可以缩减。
c) 语音处理的词称为词term
d) 只有这样处理,搜索drove和drive才能都命中。
4、将得到的词term传给索引组件idnexer去建立文档倒排列表
a) 利用得到的词term创建一个字典
b) 例如
Term document id
Student 1
Allow 1
Go 1
My 2
Friend 2
Allow 2
c) 对字典按照字母顺序排序
Term document id
Allow 1
Allow 2
Friend 2
Go 1
My 2
Student 1
d) 合并相同的词trem,形成文档倒排列表posting list
e) Document frequency文档频次,表示有多少个文档包含当前词。
f) Frequency词频次,表示一个文档中有多少个当前词。
搜索
1、用户输入查询语句。例如用户输入:lucene AND learned NOT hadoop,表明用户想要找包含lucene和learned而不包含hadoop的文档。
2、对查询语句进行语法分析,词法分析,几语言处理
a) 识别单词和关键字,lucene和learned是单词,AND和NOT是关键字
b) 形成语法树
c) 语言处理,同建立索引过程中的语言处理相同,如learned变成learn,形成经过语言处理的语法树
3、搜索索引
a) 在反向索引表中找到lucene、learn和hadoop的文档链表
b) 其次对lucene和learn的文档链表进行合并
c) 在合并的链表中去除包含hadoop的文档链表
d) 剩下的就是我们要找的文档链表
4、根据得到的文档和查询语句的相关性,对结果进行排序
a) 如何判断文档的之间的关系
b) 首先一个文档有很多词,
c) 对于文档之间的关系,不同的term的重要性不同。要判断文档的关系,首先要找出那些term对于文档是重要的。找出词term对于文档的重要性的过程称为计算词的权重term weight的过程。权重term weight的参数有两个,第一个是词term,第二个是文档document
d) 影响一个词term在文档中的重要性有两个因素:
e) Term frequency(tf):一个词在文档中出现的次数,越多说明越重要。
f) Document frequency(df):有多少文档包含一个词term,越多说明越不重要。



本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/696784,如需转载请自行联系原作者
目录
相关文章
|
编解码 IDE API
ERA5逐时、逐日、逐月气象数据的手动下载与Python代码批量下载方法
ERA5逐时、逐日、逐月气象数据的手动下载与Python代码批量下载方法
2193 2
|
XML 数据格式 Ruby
Ruby 教程 之 Ruby XML, XSLT 和 XPath 教程 5
Ruby XML, XSLT 和 XPath 教程
154 0
|
关系型数据库 MySQL 数据库
为什么要使用 Lucene|学习笔记
快速学习为什么要使用 Lucene
187 0
为什么要使用 Lucene|学习笔记
|
存储 Java 数据库
Lucene7.2.1系列(一)快速入门
Lucene是一套用于**全文检索和搜索**的开放源代码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,**Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库**。
2950 0
|
Java 索引 自然语言处理
|
4天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
15天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1309 5