lucene

参考:Lucene5.5学习(2)-Lucene全文检索的基本原理-腾讯云开发者社区-腾讯云

1、lucene是一个搜索引擎工具包,不是一个完整的搜索引擎。

2、名称解释:

Document:文档

Field:文档的某个属性

Analyzer:分词器,把分词内容交给IndexWriter建立索引

IndexWriter:把Document写入索引

Directory:索引存储位置。两个实现:FSDirectory & RAMDirectory

FSDirectory:一个存储在文件系统中的索引的位置

RAMDirectory:一个存储在内存当中的索引位置

Query:把用户输入的查询字符串封装成Lucene能识别的query,实现:TermQuery,BooleanQuery,PrefixQuery。

IndexSearcher:在建立好的索引上进行搜索。以只读的方式打开一个索引,可以多个IndexSearcher实例在一个索引上进行操作。

Hits:保存搜索结果。

Tokenizer:分词组件

Document Frequency:文档频次,多有文件包含Term

Frequency:词频率,文件中包含了几个此Term。

Stemming:词干提取

Lemmatization:词形还原

3、全文搜索相对于顺序扫描的优势之一:一次索引,多次使用。

4、创建索引过程

1)tokenizer将文档分成一个一个单独的单词;去除标点符号;去除停词(stopword),得到词元Token。

2)将Token传给语言处理组件Linguistic Processor,lowercase,stemming,lemmatization,得到词Term。

3)将Term传给索引组件Indexer,创建一个字典,然后排序,合并相同的Term,成为文档倒排Posting List链表。

分词组件(Tokenizer),都有一个停词(stop word)集合。

5、索引搜索过程:

1)用户输入

2)对输入进行词法分析,语法分析,语言处理。

词法分析:识别单词和关键字,

语法分析:语法规则形成一颗语法树。

语言处理:同索引创建过程。

3)搜索得到文档:反向索引表中找到关键字的文档链表,合并链表,

4)根据文档和查询语句的相关性,对结果进行排序。

A:找出词(Term)对文档的重要性的过程称为计算词的权重(Term weight)的过程。

B:判断词(Term)之间的关系从而得到文档相关性的过程应用一种叫做向量空间模型的算法(Vector Space Model)。

=》计算词的权重Term Weight

两个关键因素:Term Frequency & Document Frequency

Term Frequency ,tf越大说明越重要;

Document Frequency,df越大说明越不重要,太普通。

w=tf * log(n/df)

w:权重

n:总文档

=》向量空间模型的算法

文档中Term的权重,查询语句中term的权重,根据公式计算

6、索引文件结构

1)Index索引:一个索引放到一个文件夹中,所有文件构成一个Lucene索引。

2)Segment段:一个索引包含多个段,段与段是独立的,添加新的文档可以生成新的段,不同改的段可以合并。Segments.gen和segments_x是段的元数据文件,保存了段的属性信息。

3)Docment文档:建立索引的基本单位。

4)Field域:不同类型信息,比如标题,时间,正文,作者等

5)Term词,索引的最小单位,经过词法分析和语言处理后的字符串

Segments_3:保存索引包含多少段,每个段包含多少文档。

Write.lock:防止多个IndexWriter同事写到一份索引文件中。

7、正向索引,反向索引

正向索引:Index->segment->Docment->Field->Term

反向索引:Term->Document

8、加权重

更高版本不支持在生成索引时增加文档或者域的权重,而是在查询时设置查询域权重。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二次封装el-carousel

我们创建了一个名为MyCarousel的组件,它接受el-carousel的一些常用属性作为props,并默认提供了一些值。我们还通过setup函数返回了所有props,以便它们可以在模板中被使用。 1.MyCarousel.vue组件 <!-- 轮播图片 --> <template><div class="carousel&q…

Django中的定时任务与后台任务队列的实践

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Web开发中&#xff0c;处理定时任务和后台任务队列是很常见的需求。Django作为一个功能强…

vscode中使用rust的跳转定义时,rust-analyzer报错“未找到定义”,如何解决?

本文是关于错误解决的一个记录&#xff0c;如果你在使用vscode编写rust程序的过程中也遇到同样的错误&#xff0c;不妨一试。 我遇到的错误是&#xff0c;在编写的rust程序中想要跳转到当前变量或者函数的定义处&#xff0c;但按下F12无法跳转&#xff0c;且提示“未找到xxx定…

LoggerFactory is not a Logback

错误信息 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.SimpleLoggerFactory loaded from file:/D:/maven/repository/org/slf4j/slf4j-simple/1.7.26/slf…

MySQL学习笔记5——函数和索引

函数和索引 一、函数1、数学函数2、字符串函数3、条件判断函数 二、索引1、索引是什么2、单字段索引3、组合索引4、总结 一、函数 MySQL提供了很多功能强大&#xff0c;而且使用起来非常方便的函数&#xff0c;包括数学函数、字符串处理函数和条件判断函数等。 1、数学函数 …

Python网络数据抓取(3):Requests

引言 在这一部分&#xff0c;我们将探讨Python的requests库&#xff0c;并且利用这个库来进行网页数据抓取。那么&#xff0c;我们为何需要这个库&#xff0c;以及怎样利用它呢&#xff1f; requests库是广受大家欢迎的一个库&#xff0c;它是下载次数最多的。这个库使我们能够…

在windows系统安裝 SQL Server 版本的最低需求

針對對應您的作業系統所要安裝的 SQL Server 版本的最低需求 具体参考&#xff1a;Windows 作業系統的 SQL Server - SQL Server | Microsoft Learn

stable-diffusion-webui安装与使用过程中的遇到的error合集

stable-diffusion-webui1.9.2踩坑安装 1. 安装过程1.1 stable-diffusion-webui1.2 在win11或win10系统安装&#xff0c;需修改两个启动脚本1.2.1 修改webui-user.bat1.2.2 修改webui.bat 1.3 双击 webui-user.bat 启动脚本1.3.1 no module xformers. Processing without on fre…

电力调度自动化中智能电网技术的应用

电力调度自动化中智能电网技术的应用 在现代电网的现代化发展和电网重组工作中起着关键作用,由于此项技术开发时间短,目前还没有形成一个相对清晰的概念,但此技术在未来的电网发展工作中的地位已得到了一些国家的认可。由于智能电网具有良好的兼容性以及交互性等优势,一经推出就…

解决方案 SHUTDOWN_STATE xmlrpclib.py line: 794 ERROR: supervisor shutting down

Supervisor操作命令 重新加载 Supervisor 配置&#xff1a; sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl restart all这将重新读取 Supervisor 的配置文件&#xff0c;更新进程组&#xff0c;然后重启所有进程。 查看 Supervisor 日志&#xff1…

鸿蒙开发基础认证 课后习题汇总

目录 【习题】运行Hello World工程 判断题 单选题 多选题 该小节补充知识&#xff1a; 【习题】ArkTS基础知识 判断题 单选题 多选题 该小节补充知识&#xff1a; 基本概念 状态管理 页面级变量的状态管理 应用级变量的状态管理&#xff1a; 【习题】运行Hello…

3.SpringCloud版本

1.SpringCloud与SpringBoot之间版本对应 2.服务拆分的注意事项 1.不同微服务&#xff0c;不要重复开发相同业务。 2.微服务的数据独立&#xff0c;每个微服务都有自己独立的数据库&#xff0c;不要访问其他微服务的数据库。 3.微服务可以将自己的的业务暴露为接口&#xff…

婚恋相亲红娘牵线系统源码支持微信小程序+微信公众号+H5+APP社交交友系统搭建,扩展你的社交影响力与人脉资源

当代年轻人晚婚晚育甚至不愿意结婚不愿意相亲等问题愈来愈严重了&#xff0c;但是如果抛开表现去追求本质的话&#xff0c;其实不难发现年轻人们还是会喜欢去找一些志同道合或者聊得来的异性朋友交流&#xff0c;从线上发展到线下的一个流程。 核心系统核心体系是恋爱小贴士、…

【C++】详解初始化列表,隐式类型转化,类静态成员,友元

前言 初始化列表是对构造函数内容的补充&#xff0c;小编会详细的讲解初始化列表的概念&#xff0c;特性&#xff0c;注意点。这是本篇内容的重头戏&#xff0c;小编会先提一个问题来抛砖引玉。 隐式类型转换顾名思义&#xff0c;首先它不需要主动转换&#xff0c;类似于把浮点…

redis原理篇(黑马程序员虎哥 )回忆笔记

原理&#xff0c;老师讲的真好。相见恨晚。 以下内容是按视频课程的章节安排&#xff0c;在我自己听完课之后&#xff0c;凭借记忆总结的。&#xff08;可能存在疏漏不足&#xff0c;后期补全和修正&#xff0c;同时也在这个过程巩固我自己的对于这个组件相关原理的学习&#x…

Qt Debug模式下应用程序输出界面乱码【已解决】

Qt Debug模式下应用程序输出乱码 一、问题描述二、解决方法三、相关测试 一、问题描述 源码为utf-8编码. Qt Creator在Debug模式下运行程序&#xff0c;下方应用程序输出界面显示乱码. 但正常运行无乱码&#xff1a; 二、解决方法 尝试修改文件编码、执行编码无果… 可参考…

第24篇 python基础

Python的基础语法相当简洁明了&#xff0c;以下是一些关键点及其简单案例分析&#xff1a;### 1. **标识符** - 标识符是用来给变量、函数、类等命名的名称&#xff0c;必须以字母&#xff08;包括Unicode字符&#xff09;、下划线 _ 或者非数字字符开头&#xff0c;后面可以跟…

主打国产算力 广州市通用人工智能公共算力中心项目签约

4月9日&#xff0c;第十届广州国际投资年会期间&#xff0c;企商在线&#xff08;北京&#xff09;数据技术股份有限公司与广州市增城区政府就“广州市通用人工智能公共算力中心”项目进行签约。 该项目由广州市增城区人民政府发起&#xff0c;企商在线承建。项目拟建成中国最…

JS-37-jQuery06-ajax

用JavaScript写AJAX前面已经介绍过了&#xff0c;主要问题就是不同浏览器需要写不同代码&#xff0c;并且状态和错误处理写起来很麻烦。 用JavaScript写AJAX 用jQuery的相关对象来处理AJAX&#xff0c;不但不需要考虑浏览器问题&#xff0c;代码也能大大简化。 一、ajax()函数…

RK3568 android11 修改关机弹窗界面

需要修改关机弹窗界面&#xff0c;当前界面我已经按照客户需求去掉emergency 但是客户需要按其他区域可以实现返回&#xff0c;也就是点击黑色背景取消dialog 嗑代码发现黑色布局为&#xff1a; <node index"0" text"" resource-id"com.android.…