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 中国社区官方博客10 小时前
在 Windows 上使用 Docker 运行 Elastic Open Crawler
大数据·windows·爬虫·elasticsearch·搜索引擎·docker·容器
得物技术2 天前
社区搜索离线回溯系统设计:架构、挑战与性能优化|得物技术
搜索引擎
marteker3 天前
弗兰肯斯坦式的人工智能与GTM策略的崩溃
人工智能·搜索引擎
risc1234563 天前
BKD 树(Block KD-Tree)Lucene
java·数据结构·lucene
全能搬运大师4 天前
win10安装Elasticsearch
大数据·elasticsearch·搜索引擎
南城尽相思4 天前
es的自定义词典和停用词
elasticsearch·搜索引擎
risc1234565 天前
【Lucene/Elasticsearch】**Query Rewrite** 机制
elasticsearch·jenkins·lucene
mit6.8246 天前
[es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml
大数据·elasticsearch·搜索引擎·自动化
Jinkxs6 天前
Elasticsearch 简介
大数据·elasticsearch·搜索引擎
张先shen8 天前
Elasticsearch RESTful API入门:全文搜索实战(Java版)
java·大数据·elasticsearch·搜索引擎·全文检索·restful