您的位置:首页 > 其它

搜索学习基础--基本概念的简单阐述

2017-11-09 20:13 507 查看

关于查询

查询数据分为精确查找模糊查找

精确查找:对于精确查找,我们都非常熟悉,就是这个值必须等于这个条件。比如我们常用的数据库查询中:

select * from user_info where user_id = ?

模糊查找:对于模糊查找,我们需要查找的范围就是结果中的某个值必须包含这个条件。平时我们在一个文档中查找某个

单词,这就是模糊查找。

对于普通的查找,我们是从一个文档中,一个一个的去遍历匹配。比如我们要从10w个数据中,

查找包含字符串“abc”的,那就相当得慢。如果这些数据在数据库中,我们通常会建立索引,去优化查询速度。对于比较大的文本内容,

我们通常使用全文检索的方式。总结:对于优化查询,我们使用数据库建立索引和使用全文检索

关于数据库建立索引

为了优化查询速度,我们会对数据库中的数据建立索引。在mysql数据库中,有两种索引方法:BtreeHash

这两种方式为什么会加速查询。两种方式有什么区别,这是我们必须了解的。

- Hash方法建立索引

Hash,就是我们所谓的散列表,它的存储是key-value结构的。当我们对数据建立索引后,我们的每个数据都会有一个对于的Hash值。当我们去查找数据的时候,只要取条件

的Hash值即可。数据存储的位置通过Hash值快速找到。我们也从Hash算法的原理中可以看到,这种索引方式比较适合精确查找。下面举个简单的Hash查找的例子:

HashCode = 2x+1

hashcodevalue
115
10150
12160


假设库中有大量的数据,此时我们的搜索条件是60,我们取得HashCode = 2*60+1 = 121,然后拿着121去库中寻找其存放的位置。这样就非常的速度。当然这只是一个简单的Hash。

对于优化散列表,减少冲突这些我们这里就不做讨论。

如果想实现以下Hash算法整个过程,可以看下此博客哈希算法的Java实现

Btree方法建立索引

看到这个名字,我想大学里面学过数据结构这门课程的都会首先想到数据结构中的这个概念。用于搜索,我们肯定会想到二叉树。不管数据库索引它用的是哪种树,

它肯定是一种基于二叉搜索树优化的树,所以我们只要了解二叉搜索树这个结构算法,我们就可以知道为什么使用Btree方式建立索引会加速查找了。它把原来的时间复杂度从

O(n) 转变成了 O(log2(n))。因为二叉树的中序遍历的结果就是根据key值排序的列表,所以这种方式对于范围查找是非常合适的。

如果想实现以下二叉搜索树的建立和查找的整个过程,可以看下此博客二叉搜索树的Java实现

关于全文检索

对于大偏的文档,使用数据库建立索引就非常不合适了。此时我们会建立全文索引,而建立全文索引,有正排索引倒排索引

两者的区别从名字上就可以看出来。

- 正排索引:通过文章查找关键词

- 倒排索引:通过关键词查找文章

对于正排索引,也就是我们一般得搜索方式,对所有文章遍历,查找包含关键词得文章。而倒排索引呢,是给每个关键词对应匹配文档,建立好索引。当你查找得时候,这些关键词在

哪些文档出现过,出现得次数,出现得位置,一目了然。倒排索引的解读
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: