Lucene系列(9)——QueryParser介绍
本文介绍一个比较“特殊”的查询API——QueryParser,它的特殊之处在于定义了一些查询语法,通过这些语法几乎可以实现前文介绍的所有Query API提供的功能,但它的存在并不是为了替换那些API,而是用在一些交互式场景中。本文不会再细述Lucene各个查询的含义及用法(比如什么是edit d ...
2021-11-26
Lucene系列(8)——常用Query介绍
搜索是使用Lucene的根本目的,本文介绍Lucene提供的常用查询。下面的讲述中,会以之前《Lucene系列(2)——代码实践》文章中4首短诗的索引数据为例进行查询,你可以先阅读那篇文章构建索引。在Lucene中,Term是查询的基本单元(unit),所有查询类的父类是org.apache.luc ...
2021-11-26
Lucene系列(7)——索引存储文件介绍
本文讨论Lucene底层索引数据存储。对于绝大数多人来说了解Lucene的上层概念足矣,无需关注底层的存储格式。所以本文虽然是讨论底层数据存储的,但也不会深入到具体的数据结构、压缩算法等。如果你有兴趣,可以查看对应版本的Lucene Java doc(8.2.0版本的链接已经附在文末)。另外,如果你 ...
2021-11-26
Lucene系列(6)——字段及其属性
在创建Field的时候,第一个参数是字段名,第二个是字段值,第三个就是字段属性了。字段的属性决定了字段如何Analyze,以及Analyze之后存储哪些信息,进而决定了以后我们可以使用哪些方式进行检索。本文就来介绍字段以及它的的一些常用属性。
2021-11-26
Lucene系列(5)——倒排索引、Token与词向量
上文我们对Analyzer的原理和代码进行了分析,主要偏重流程,这篇文章来分析Analyzer的输出细节——Token。对原始数据进行Analyze的终极目的是为了更好的搜索,所以还会讨论和搜索相关的倒排索引和词向量(Term Vector)。
2021-11-26
Lucene系列(4)——Analyzer原理及代码分析
前面的文章中多次提到了分析器Analyzer,它就像一个数据加工厂,输入是原始的文本数据,输出是经过各种工序加工的term,然后这些terms以倒排索引的方式存储起来,形成最终用于搜索的Index。所以Analyzer也是我们控制数据能以哪些方式检索的重要点,本文就带你来了解一下Analyzer背后 ...
2021-11-25
Lucene系列(3)——术语总结
前两篇文章分别从理论和代码角度概览了Lucene的功能,在开始各个模块的深入学习之前,我们先来总结一下之前提到的一些概念、术语,因为这些会贯穿后面几乎所有的文章,所以有必要理解清楚。其中有些概念是Lucene定义的,有些则是通用的IR领域术语。
2021-11-25
Lucene系列(2)——代码实践
上篇文章《Lucene系列(1)——理论介绍》中我们说了搜索的流程分前台用户查询流程和后台索引构建流程。本文就借助Lucene(目前最新的8.2.0版本)来实现这两个流程。当然,我们说了Lucene并不负责数据采集和提取,所以为了简单起见,我从网上找了几首精美的英文短诗作为原始数据,你可以认为这就是 ...
2021-11-25
Lucene系列(1)——理论介绍
信息检索(Information Retrieval,IR)是一门非常古老且复杂的学科,现在的人工智能,特别是NLP、数据挖掘领域更是和IR有着千丝万缕的关系。但这些都不是本文的重点,本文要讨论的是一个轻松的话题,那就是Solr和ES背后所使用的全文检索库Lucene,顺便介绍一下简易版的搜索引擎背 ...
2021-11-25
浅谈搜索引擎技术原理与架构
曾经看过一个百度员工写的段子:“今天一个出租出司机载我去上班,一边看着百度大厦一边说,你们百度不就是个框吗,要这么多员工干啥。他说的好有道理,我竟无言以对”。那么搜索引擎背后到底是什么,到底复杂不复杂,这里为大家一一解答。本文只是简要介绍一下总体需要的原理,具体的技术原理,我会在后续的文章中深入介绍 ...
2021-11-25

© 2016 - 2024 chengxuzhixin.com All Rights Reserved.

浙ICP备2021034854号-1    浙公网安备 33011002016107号