简介
ucene是一套用于全文检索和搜寻的开源程序库,由Apache软件基金会支持和提供
Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具
Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品
什么是全文检索?
什么是倒排索引
索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址
索引数据量爆炸解决方式
不存储数据,只存储能索引到数据的key
分词
根据语义的需要,将句子划分成不同的分词,统计分词出现的频率和位置.
一次简单的搜索流程
假设我们搜索谷歌地图之父,搜索流程会是这样
分词插件将句子分为3个分词 谷歌,地图,之父
将这3个分词拿到倒叙索引中去查找(会很高效,比如二分查找),如果匹配到了就拿对应的文档id,获得文档内容
但是,如何确定结果顺序?
这里要引入_score的概念,对于分词的匹配,lucene会对其打分,得分越高,排名越靠前.这里要介绍几个相关的概念
TF(term frequency),词频,分词在当前document中出现的频率,一个分词在当前document中出现5次要比出现1次更相关,打分也会更高
IDF(inverse doucment frequency),逆向文档频率,term在所有document中出现的频率,这个频率越高,该term对应的分值越低
字段长度归一值,简单来说就是字段越短,字段的权重越高, 比如 term 我在匹配 我123和我123456时,我123的得分会更高.
Lucene缺点:
Lucene 的内建不支持群集
封闭设计的API使得扩展Lucene变得很困难
参考:https://www.jianshu.com/p/d68197bc7def