搜索引擎相关概念

  • 倒排索引(inverted index)也称反向索引,搜索引擎中最常见的数据结构,将文档中的词作为关键字,建立词与文档的映射关系,通过对倒排索引的检索,可以根据词快速获取包含这个词的文档列表
  • 分词:将句子或者段落进行切割,从中提取出包含固定语义的词
  • 停止词(stop word):没有具体含义、区分度低的词
  • 排序:当输入一个关键字进行搜索时,将相关度更大的内容排在前面

Lucene

  • 高性能、可伸缩的、开源的信息检索库

Lucene 索引的构建过程

  • 通过指定的数据格式,将 Lucene 的 Document 传递给分词器 Analyzer 对各字段进行分词
  • 经过分词器分词之后,通过索引写入工具 IndexWriter 将得到的索引写入到索引库,Document 本身也会被写入一个文档信息库
  • 分词器不同,建立的索引数据就不同;比较通用的一个中文分词器 IKAnalyzer

    Lucene索引的构建过程
    图 1 Lucene索引的构建过程

Lucene 索引搜索过程

  • 首先构建查询的 Query,通过 IndexSearcher 进行查询,得到命中的 TopDocs
  • 然后通过 TopDocs 的 scoreDocs() 方法,拿到 ScoreDoc,通过 coreDoc,得到对应的文档编号
  • IndexSearcher 通过文档编号,使用 IndexReader 对指定目录下的索引内容进行读取,得到命中的文档后返回

    Lucene索引搜索过程
    图 2 Lucene索引搜索过程

Lucene 的使用

  • 构建索引、索引更新与删除、条件查询、结果排序、高亮、中文分词器、索引优化、分布式扩展

Solr

  • 基于 Lucene 开发的全文检索服务器
  • 用户可以通过 HTTP POST 请求,向服务器提交 Document,生成索引,以及进行索引的更新和删除操作

Elasticsearch

  • 基于 Apache Lucene 库构建的 RESTful 搜索引擎