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. 常用的中文分词器
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。