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、加权重

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

相关推荐
Elastic 中国社区官方博客21 小时前
Elasticsearch:什么是向量数据库?
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·ai
hyf3266332 天前
高收益玩法:站群泛程序结合本地服务引流变现全流程
运维·服务器·前端·搜索引擎·蜘蛛池
-今昭-3 天前
AnsibleVault加密配置及zabbix部署
大数据·elasticsearch·搜索引擎
我一定会有钱3 天前
打造完美工作流:Git 配置”一次推送,三端同步”(Gitee/GitCode/GitHub)
开发语言·windows·vscode·搜索引擎·gitlab·github·visual studio code
hzxpaipai3 天前
杭州GEO网站建设哪家好:面向搜索引擎与AI推荐的
搜索引擎
Elastic 中国社区官方博客3 天前
跳过有状态的 OTel Collector:Elasticsearch 9.5 原生存储两种指标时间类型
大数据·人工智能·elasticsearch·搜索引擎·重构·全文检索
hyf3266334 天前
低成本站群泛程序部署:单服务器托管百站稳定运行教程
运维·服务器·前端·搜索引擎·蜘蛛池
Elastic 中国社区官方博客5 天前
你的 AI agent 不需要你的 API 密钥:使用 OAuth 2.1 对 Elasticsearch MCP 服务器进行身份验证
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索
Linguwen5 天前
外贸GEO06|AI搜索引擎怎么工作?理解原理才能做好优化
人工智能·搜索引擎
无己心5 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节