倒排索引

倒排索引思想

谁说我不能喝 提交于 2019-11-30 13:24:37
倒排索引思想 参考文档: https://www.cnblogs.com/zlslch/p/6440114.html 人生不易,唯有努力 一.引入倒排索引 正常开发中,正排索引是比较常用的,数据库就是正排索引 正排索引是根据id查询对应的数据(一个id对应一张表中的一条数据); 倒排索引是根据关键字查询包含该关键字的多个文档(可以理解为根据关键字查询多个文档的id) 倒排索引普遍用于电商的搜索功能, 来源: https://www.cnblogs.com/aihuadung/p/11593238.html

Elasticsearch - 倒排索引原理

半城伤御伤魂 提交于 2019-11-28 19:02:29
关于es为什么搜索快,大家应该有所了解,但是到底什么是倒排索引?网上找到一篇介绍通俗易懂,转载如下:   见其名知其意,有倒排索引,对应肯定,有正向索引。 正向索引(forward index),反向索引(inverted index)更熟悉的名字是倒排索引。 在搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)。例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数和出现位置。 得到正向索引的结构如下: “文档1”的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。 “文档2”的ID > 此文档出现的关键词列表。   一般是通过key,去找value。 当用户在主页上搜索关键词“华为手机”时,假设只存在正向索引(forward index),那么就需要扫描索引库中的所有文档,找出所有包含关键词“华为手机”的文档,再根据打分模型进行打分,排出名次后呈现给用户。因为互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。 所以,搜索引擎会将正向索引重新构建为倒排索引,即把文件ID对应到关键词的映射转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。

(05)ElasticSearch 倒排索引

青春壹個敷衍的年華 提交于 2019-11-28 10:12:37
  ElasticSearch使用一种倒排索引的结构,它适用于快速全文搜索,一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表,可以提高文档的搜索速度。假如文档如下:   建立的倒排索引如下:   倒排索引表中可以记录频率,即在一个文档中某个词出现的次数,如下图,“数学”一词在文档编号为3的文档中出现了两次。   倒排索引表还可以记录单词出现的位置信息如(1,<11>,1)、(3,<3,9>,2)分别代表单词id为1的单词出现了1次,位置是11,单词id为3的单词出现了2次,位置分别是3和9。 来源: https://www.cnblogs.com/javasl/p/11371234.html

Solr简介

独自空忆成欢 提交于 2019-11-27 12:45:02
# 搜索引擎 搜索引擎,Search Engine是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,再对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎和免费链接列表等。 一个搜索引擎由搜索器、索引器、检索器和用户接口四个部分组成: 1. **搜索器** 的功能是在互联网中漫游,发现和搜集信息。 2. **索引器**的功能是理解搜索器搜索到的信息,从中抽取出索引项,用过表示文档以及生成文档库的索引表。 3. **检索器**的功能是根据用户的查询在索引库中快速检出文档,进行文档与查询的相关度评价,对将要输出的结果进行排序,并实现某种用户相关性反馈机制。 4. **用户接口**的作用是输入用户查询、显示查询结果、提供用户相关性反馈机制。 搜索引擎现在主要为全文索引和目录索引,垂直搜索引擎由于其在特定领域的更高的用户体验,以及更小的硬件成本,也开始逐渐兴起。 ## 分类 ### 全文搜索引擎 搜索引擎的自动信息搜集功能分两种。 一种是*定期搜索*,即每隔一段时间搜索引擎主动派出爬虫程序,对一定IP地址范围内的互联网网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。 另一种是*提交网站搜索*,即网站拥有者主动向搜索引擎提交网址

6.X elasticsearch实战学习笔记_底层原理

假装没事ソ 提交于 2019-11-27 05:49:00
一、倒排索引 倒排索引 词项(term) : 搜索时的一个单位,代表文本中某个词 倒排索引结果是一种将词项映射得到文档的数据结构 倒排索引建立步骤 a. 提取词项 首先对文档分词,英文文档用空格分隔 去除无实际意义的词,如is、a、in、as等 对单词统一大小写 单复数,过去式、进行时转换 过滤标点符号 【本步骤,将无用的过滤掉并统一词项格式】 b. 建立倒排索引 将词项映射到文档 【将提取的词项,映射到文档,一个词项可对应多个文档】 c. 建立词项出现的频率、位置和偏移量 文档ID :用于根据词项定位文档的原始信息 频率 :记录词项在文档出现的次数,用于搜索相关性算分 位置 :记录在文档中是第几个关键字,用于词组查询 偏移量 :记录开始和结束的位置,用于做高亮显示 二、 底层内部原理 倒排索引不可变性 倒排索引写进磁盘永不会被改变 因此无需锁,不必担心多进程同时修改数据问题 大部分读请求直接请求内存,不命中磁盘 不会因为数据改变而重建缓存中数据 单个大的倒排索引允许数据被压缩 不支持部分文档更新 新文档可被搜索,需重建整个倒排索引,限制索引包含数据量,索引更新频率 Lucene按段搜索(per-segment) 段文件(segment file):存储倒排索引的文件,每个segment是一个倒排索引。文档写入lucene,并且生成完整的segment后才能被搜索 提交点

倒排索引

不想你离开。 提交于 2019-11-27 01:11:08
1、数据库中的索引是对字段的内容操作,可以认为是对字段取值建一个排序结构,这样在查找的时候就不用遍历查找了。 2、考虑现实当中的一种需求,对于某个关键字我想知道在哪个文档出现,上面的索引技术不能解决这个问题。怎么办? 3、这要使用倒排索引,对每个关键字建立一个索引,标示在哪个文档里出现。比如:中国 对应 101100,杭州 对应 100110,说明中国在 第1、3、4个文档出现,杭州在第1、4、5文档出现。同时出现中国和杭州的文档有 101100&100110 = 100100 第1、4文档出现。出现中国没有出现杭州的文档有:101100&!100110=001000,只有第3个文档。 4、实际情况要比刚才的例子复杂的多,不光要考虑是否出现,还要考虑出现的次数,文档的质量等,根据这些情况对搜索的结果排序,这就是互联网的搜索引擎。 转载于:https://www.cnblogs.com/nzbbody/p/4440059.html 来源: https://blog.csdn.net/weixin_30780221/article/details/99234825

Elasticsearch 查询

家住魔仙堡 提交于 2019-11-26 23:33:53
此文档基于1.0版本,属于落后内容,但大致可以用于了解Elasticsearch的特性。 Elasticsearch 查询 轻量级搜索,使用Query-string curl -X GET "http://localhost:9200/employee/_search?q=last_name:Smith +name:(mary john) +date:>2014-09-10 +(aggregations geo)" http://localhost:9200/tcr0081/_search?q=+Flag:1%20%20AND%20+ITCode2:1011885812 GET /_search?sort=date:desc&sort=_score&q=search 注:表达式中:+ 前缀表示必须与查询条件匹配。类似地, - 前缀表示一定不与查询条件匹配。没有 + 或者 - 的所有其他条件都是可选的——匹配的越多,文档就越相关。 _all字段,是string类型;可以使用copy_to替换,copy_to支持更加复杂的查询 不要轻易使用轻量级搜索,尽量使用request body 查询API 查询表达式 curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json'