070. 搜索引擎理论简述

2021-03-03 10:22:47 浏览数 (1)

1. 索引


1. 索引的原理是什么?
  • 对列值创建排序存储,数据结构={列值、行地址}。在有序数据列表中就可以利用二分查找(或者其他方式)快速找到要查找的行的地址,再根据地址直接取行数据。
2. 为什么称为倒排索引?
  • 英文原名为 Inverted index,失败地被翻译成了倒排索引。
  • 应该翻译为:反向索引。
3. 反向索引的记录数会不会很大?
  • 英文单词的大致数量是10万个。
  • 汉字的总数已经超过了8万,而常用的只有3500字。
  • 《现代汉语规范词典》比《现代汉语词典》收录的字和词数量更多。前者是13000多字,72000多词,后者是11000多字,69000多词。

2. 搜索引擎


1. 为什么需要搜索引擎?
  • 数据库适合结构化数据的精确查询,而不适合半结构化、非结构化数据的模糊查询及灵活搜索(特别是数据量大时),无法提供想要的实时性。
  • 数据举例:
    • 结构化数据: 用表、字段表示的数据。
    • 半结构化数据: xml、html。
    • 非结构化数据: 文本、文档、图片、音频、视频等。
2. 中文分词器原理
  • 有个词的字典,对语句前后字进行组合,与字典匹配,歧义分析。
3. 常用的中文分词器
  • IKAnalyzer
  • mmseg4j
4. 如何选择分词器
  • 准确率
  • 分词效率
  • 中英文混合分词支持
5. 你、我、他、的、地、了、标点符号......这些需要为其创建索引吗?
  • 这种词一般称为停用词,不会被索引。
6. 复杂的相关性计算模型
  • tf-idf 词频-逆文档率模型。
  • 向量空间模型。
  • 贝叶斯概率模型,如: BM25。

3. Tf-idf 相关性计算模型详解


1. tf
  • tf: term frequency 词频,指一个词在一篇文档中出现的频率。
  • tf_(t,d) = 词t在文档d中的出现次数 / 文档d的总词次数。
2. df
  • df: document frequency 词的文档频率,指包含某个词的文档数(有多少文档中包含这个词)。df越大的词越常见。
  • df值越大,这个词在文档集中越不重要。
  • 词t的tf高,在文档集中的重要性也高,文档与该词越相关。
3. idf
  • idf: inverse document frequency 词的逆文档频率,用来表示词在文档集中的重要性。文档总数/df,df越小,词越重要,这个值会很大,那就对它取个自然对数,将值映射到一个较小的取值范围。
  • idf_t = log(文档集的总文档数/(包含词t的文档数 1)), 1是为了避免除 0。
4. tf-idf相关性计算模型
代码语言:javascript复制
(tf-idf)_t = tf_{t,d} * idf_t

4. Java开源搜索引擎


  • Nutch、Solr、Elasticsearch 等都依赖于 Lucene。
  • Lucene: Apache 顶级开源项目,Lucene-core 是一个开放源代码的全文检索引擎工具包。
  • Nutch: Apache 顶级开源项目,包含网络爬虫和搜索引擎(基于 lucene)的系统(如百度、google)。Hadoop 因它而生。
  • Solr: Lucene 下的子项目,基于 Lucene 构建的独立的企业级开源搜索平台,一个服务。它提供了基于 xml/JSON/http 的 api 供外界访问,还有 web 管理界面。
  • Elasticsearch: 基于 Lucene 的企业级分布式搜索平台,它对外提供 restful-web 接口,让程序员可以轻松、方便使用搜索平台,而不需要了解 Lucene。

0 人点赞