ElasticSearch
全文检索
数据结构
-
结构化数据:固定格式,固定长度,如关系型数据库的设计的库表
-
半结构化数据:有固定格式,但是不定长 如xml/html
-
非结构化数据:不定长,无固定格式,比如邮件、word文档、日志等
搜索分类
-
结构化数据搜索:使用关系型数据库
-
非结构化数据搜索
-
es搜索原理
-
内容爬取:停顿词、语气词和连接词过滤
-
内容分词:提取关键字
-
根据关键词建立倒排索引
-
用户输入关键词进行搜索
-
正排倒排索引
正排索引
正排索引:一个未经处理的数据库中,一般是以文档ID作为索引,以文档内容作为记录。
举例:如图1,是按照顺序读取每一条数据,如关系型数据库的中的 like ‘%****%’
倒排索引
倒排索引:Inverted index,指的是将单词或记录作为索引,将文档ID作为记录,这样便可以方便地通过单词或记录查找到其所在的文档。
举例:如图2,将文档中的关键字做一个索引,记录文档的id,查询时根据索引返回结果。
倒排工作原理:事先将爬虫拿到的网页数据根据关键词分组;将用户请求的关键词对应的分组返回给用户。
倒排的hash冲突
hash冲突:在向Hash表中存数据时,首先要用Hash函数计算出该数据要存放的地址。但是在这个地址中已经有值存在,所以这个时候就发生了Hash冲突。也就是一句话:key值不同的元素可能会映象到哈希表的同一地址上。
倒排的hash冲突的原因:md5 (content) 做 key,有可能产生相同的key,如md5 (content1) = md5 (content2)
解决办法:根据拿到的文档编号做正排索引,如图