搜索引擎相关概念
- 倒排索引(inverted index)也称反向索引,搜索引擎中最常见的数据结构,将文档中的词作为关键字,建立词与文档的映射关系,通过对倒排索引的检索,可以根据词快速获取包含这个词的文档列表
- 分词:将句子或者段落进行切割,从中提取出包含固定语义的词
- 停止词(stop word):没有具体含义、区分度低的词
- 排序:当输入一个关键字进行搜索时,将相关度更大的内容排在前面
Lucene
- 高性能、可伸缩的、开源的信息检索库
Lucene 索引的构建过程
- 通过指定的数据格式,将 Lucene 的 Document 传递给分词器 Analyzer 对各字段进行分词
- 经过分词器分词之后,通过索引写入工具 IndexWriter 将得到的索引写入到索引库,Document 本身也会被写入一个文档信息库
分词器不同,建立的索引数据就不同;比较通用的一个中文分词器 IKAnalyzer
Lucene 索引搜索过程
- 首先构建查询的 Query,通过 IndexSearcher 进行查询,得到命中的 TopDocs
- 然后通过 TopDocs 的 scoreDocs() 方法,拿到 ScoreDoc,通过 coreDoc,得到对应的文档编号
IndexSearcher 通过文档编号,使用 IndexReader 对指定目录下的索引内容进行读取,得到命中的文档后返回
Lucene 的使用
- 构建索引、索引更新与删除、条件查询、结果排序、高亮、中文分词器、索引优化、分布式扩展
Solr
- 基于 Lucene 开发的全文检索服务器
- 用户可以通过 HTTP POST 请求,向服务器提交 Document,生成索引,以及进行索引的更新和删除操作
Elasticsearch
- 基于 Apache Lucene 库构建的 RESTful 搜索引擎