首页
学习
活动
专区
圈层
工具
发布

详解Elastic Search高速搜索背后的秘密:倒排索引

一 、Elastic Search的简介 Elastic Search(简称ES)是一个基于Apache Lucene构建的开源、分布式、RESTful搜索和分析引擎。...与传统的正排索引不同,倒排索引是根据关键词来建立索引,而不是根据文档ID。...2.1 倒排索引讲解 下面我们用一个简单的例子描述一下倒排索引的作用过程: 假如现在有三份数据文档,内容分别是: 代码语言:javascript Doc 1:Java is the best programming...然后,为每个单词或词组创建一个倒排列表,该列表记录了包含该单词或词组的所有文档的ID和该单词在文档中的位置信息(如偏移量、词频等)。...然后,根据这个查询词列表在倒排索引中查找对应的倒排列表,并将这些倒排列表进行交集运算,以找到同时包含所有查询词的文档。最后,根据一定的排序算法对结果进行排序,并返回给用户。

68110

Elastic Search搜索引擎在SpringBoot中的实践

ES版本:5.3.0 spring bt版本:1.5.9 首先当然需要安装好elastic search环境,最好再安装上可视化插件 elasticsearch-head来便于我们直观地查看数据。...当然这部分可以参考本人的帖子: 《centos7上elastic search安装填坑记》 https://www.jianshu.com/p/04f4d7b4a1d3 我的ES安装在http://113.209.119.170...项目自动生成以后pom.xml中会自动添加spring-boot-starter-data-elasticsearch的依赖: 本项目中我们使用开源的基于restful的es java客户端jest,...各部分代码详解如下,注释都有: Entity.java TestService.java TestServiceImpl.java EntityController.java ---- 实际实验 增加几条数据...当然这里用的是standard分词方式,将每个中文都作为了一个term,凡是包含“南”、“京”关键字的记录都被搜索了出来,只是评分不同而已,当然还有其他的一些分词方式,此时需要其他分词插件的支持,此处暂不涉及

1.2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    突破Java面试(15)-分布式搜索引擎Elastic Search的工作流程

    以下用ES表Elastic Search 1 面试题 ES写入/查询数据的工作原理是什么呀? 2 考点分析 面试官就是想看看你是否了解ES的一些基本原理....查询,GET某一条数据,写入了某个document,该document会自动给你分配一个全局唯一id-doc id,同时也是根据doc id进行hash路由到对应的primary shard上面去.也可以手动指定...可以通过doc id来查询,会根据doc id进行hash,判断出当时把doc id分配到了哪个shard,从那个shard去查询 客户端发送请求到任意一个node,成为coordinate node...JavaEdge公众号呀 Java学习者们建议关注哦 java就很好学了呢 注意这里的字母大小写哟~ 根据Java关键词来搜索,将包含Java的document给搜索出来 ES就会给你返回:JavaEdge...phase 接着由coordinate node,根据doc id去各节点中拉取实际的document数据,最终返回给客户端 3.4 搜索的底层原理 - 倒排索引 画图说明传统数据库和倒排索引的区别

    71940

    探索Elastic Search:强大的开源搜索引擎,详解及使用

    一、Elastic Search简介 Elastic Search(简称ES)是一个基于Lucene构建的开源搜索引擎。...Lucene是一个强大的全文搜索库,但ES在Lucene的基础上增加了分布式、RESTful API和实时搜索等功能。这使得ES成为一个适用于各种应用场景的强大搜索引擎。...二、Elastic Search的特点 支持分布式集群 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司 ES可以在多个服务器上运行,从而实现横向扩展...作为一个强大的开源搜索引擎,具有分布式、实时搜索、可扩展性等优点,适用于各种应用场景。...无论是小型项目还是大型企业,ES都能提供高效的搜索和数据分析能力。如果你正在寻找一个可靠的搜索引擎,Elastic Search绝对值得一试。

    1.3K10

    3分钟短文 | Laravel模型获取最后一条插入记录的ID编号

    比如有一个CRM系统,需要用户输入上报公司信息之后,通过API接口返回提示信息。 ?...代码比较简单,知识将 request 的 input 内容复制给 Company 模型的属性,然后调用 save 方法将数据存入。 那么,如果想要获取存入后数据条目的ID,如何返回呢?...直接调用属性值即可: $data->id; 封装到 Response 响应体内: return Response::json(array('success' => true, 'last_insert_id...' => $data->id), 200); 上面的写法自然是对的,返回的是当前写入的条目的ID。...但是,如果是并发的系统,或者在流程处理中,没有使用 Company 模型进行数据操作,而是 DB::statement,DB::insert 这些,获取到的,可就不是最后的ID了。

    3.3K10

    JS数组at函数(获取最后一个元素的方法)介绍

    本文介绍js中数组的at函数,属于比较简单的知识普及性文章,难度不大。 0x00 首先,我们可以思考如下一个问题,如果要获取一个数组的最后一个元素(这是很常用的操作),我们应该怎么做?...相信大部分人能够想到的代码是这样的: let last = array[ array.length - 1]; 嗯,这是最常用的获取数组最后一个元素的方式,依此类推获取倒数第二个,第三个的方式类似。...当然除了这种方式之外,还有其他的方式,比如: let last = array.slice(-1)[0] 先通过slice获取后面一个元素的数组,然后通过下标0获取最后一个元素。...这就让人羡慕python里面的数组操作,可以通过负索引的方式获取最后一个元素,代码如下: last = array[-1] js里面不支持负索引的方式。...不过es6新增了一个at方法,可以获取数组的指定索引的元素,并且支持负索引。负索引从后往前计算,-1表示最后一个,-2 表示倒数第二个,依此类推。 因此试用此方法获取最后一个元素会变得简单很多。

    6.4K30

    Java函数详解:获取传入日期的最后一天

    如果数据是从一个旧系统迁移到新系统,那么可能需要知道迁移的最后一天是哪一天,以便可以结束迁移并启动新系统的运行。这个时候就需要一个“获取传入日期的最后一天”这样的函数来实现以上功能需求。...下面是由SoFlu软件机器人中的函数AI生成器FuncGPT(慧函数)生成的一个简单的示例代码:// 类名:FunTest// 函数名:getLastDayOfMonth// 函数功能:获取传入日期的最后一天...// POM依赖包:无import java.util.Calendar;import java.util.Date;public class FunTest { /** * 获取传入日期的最后一天...在这个示例中,使用了Java的Calendar类来操作日期。具体来说,它首先创建一个Calendar实例,将其时间设置为传入的日期,并通过Calendar实例获取传入日期的年份和月份。...将下一个月的第一天减去一天,这样你就得到了传入日期的最后一天。最后,返回最后一天的日期。

    89610

    Elastic Stack 实战教程 5:Elasticsearch Java API Client 开发

    6 写入文档 Elasticsearch Java API Client 提供了两种索引文档的方式: 1.提供一个应用对象,Elasticsearch Client 负责将对象映射为 JSON。...2.直接提供原始的 JSON 数据。 如下所示,我们创建了一个 Product 对象,将数据写入索引 products 中,并使用商品 id 作为 doc id。...执行以下命令,查询 products 索引的数据,可以看到 id 为 sn10001 的文档已经被成功写入了。...7 查询文档 使用 get 请求可以根据 id 来获取文档。get 请求有两个参数: 第一个参数是实际请求,在下面用 fluent DSL 构建。 第二个参数是希望将文档的 JSON 映射到的类。...如下所示,指定删除索引 products 中 id 为 sn10005 的文档。

    2.8K20

    ES(Elasticsearch)支持PB级全文搜索引擎入门教程

    全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。...Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用,特别高效、方便。 在此我从零给大家 讲解如何使用 Elastic 搭建自己的全文搜索引擎。...详细说明每一个步骤,大家跟着做就能学会。 一、安装 Elastic 需要 Java 8 环境。如果你的机器还没安装 Java,可以参考这篇文章,注意要保证环境变量JAVA_HOME正确设置。...2.2 Index Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。...所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。 下面的命令可以查看当前节点的所有 Index。

    2.2K00

    最后一个单词的长度(Java)

    二、题目描述: 题目:        给你一个字符串  ​​​s​​,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。...首先从后往前开始遍历,找到第一个字母即为最后一个字母的最后一个字母,然后继续遍历,如果遇到如下两种情况: 遇到空格,停止循环,直接返回count计数。...达到字符串的起始位置,说明遍历到的每一个字母都是最后一个单词中的字母,直接返回count计数即可。       然后思路2,大家看看就好,纯粹就是取巧啦。做法就是: 先去除字符串首尾的空格。...获取最后一个空格的数组索引,然后很明显就可以确定最后一个字母的位置及长度了,因为最后一个字母前面的空格索引已经知道了,且后边也不会再出现空格。...public int lastIndexOf(String str): 返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

    34620

    Go Elasticsearch 查询快速入门

    7.分页查询 from + size search after scroll api 小结 8.查询文档是否存在 8.1 根据ID判断文档是否存在 8.2 查询符合条件的文档数量 9.获取文档数量 参考文献...(3)如果想对输入的分词结果全部匹配且最后一个分词支持前缀匹配,请使用 match phrase prefix query; (4)如果是对 keyword 字段进行 MatchQuery,因为该类型不会分词..., false). // 按照创建时间降序 SearchAfter(lastCreateTime, id). // 上页最后一条的创建时间和 ID Size(1000)....": [ {"create_time": "desc"}, {"_id": "desc"} ] } 在返回的结果中,最后一个文档有类似下面的数据,由于我们排序用的是两个字段,返回的是两个值...,有一个 _scroll_id 字段,下次搜索的时候带上这个数据,并且使用下面的查询语句。

    9.8K40

    全文搜索引擎 Elasticsearch 入门教程

    全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。...Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。 本文从零开始,讲解如何使用 Elastic 搭建自己的全文搜索引擎。...每一步都有详细的说明,大家跟着做就能学会。 一、安装 Elastic 需要 Java 8 环境。如果你的机器还没安装 Java,可以参考这篇文章,注意要保证环境变量JAVA_HOME正确设置。...安装完 Java,就可以跟着官方文档安装 Elastic。直接下载压缩包比较简单。...2.2 Index Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。

    1.2K70

    后端技术杂谈4:Elasticsearch与solr入门实践

    每一步都有详细的说明,大家跟着做就能学会。 一、安装 Elastic 需要 Java 8 环境。如果你的机器还没安装 Java,可以参考这篇文章,注意要保证环境变量JAVA_HOME正确设置。...2.2 Index Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。...分词搜索结果 至此,基本的搜索引擎搭建完毕,外部应用只需通过 http 协议提供查询参数,就可以获取搜索结果。 四、搜索干预 通常需要对搜索结果进行人工干预,比如编辑推荐、竞价排名或者屏蔽搜索结果。...Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。 Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。...其他基于Lucene的开源搜索引擎解决方案* 直接使用 Lucene 说明:Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作。

    1.5K10

    全文搜索引擎Elasticsearch入门教程

    全文搜索属于最常见的需求,开源的Elasticsearch(以下简称 Elastic)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。...本文从零开始,讲解如何使用 Elastic 搭建自己的全文搜索引擎。每一步都有详细的说明,大家跟着做就能学会。 一、安装 Elastic 需要 Java 8 环境。...如果你的机器还没安装 Java,可以参考这篇文章,注意要保证环境变量JAVA_HOME正确设置。...2.2 Index Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。...":2,"successful":1,"failed":0}, "created":true } 如果你仔细看,会发现请求路径是/accounts/person/1,最后的1是该条记录的 Id。

    1.5K70

    【JavaScript】内置对象 - 数组对象 ④ ( 索引方法 | 查找给定元素的第一个索引 | 查找给定元素的最后一个索引 | 索引方法案例 - 数组元素去重 )

    文章目录 一、索引方法 1、查找给定元素的第一个索引 - indexOf() 2、查找给定元素的最后一个索引 - lastIndexOf() 二、索引方法案例 - 数组元素去重 1、需求分析 2、代码实现...1、查找给定元素的第一个索引 - indexOf() 调用 Array 数组对象 的 indexOf() 方法 可以 查找给定元素的第一个索引 , 语法如下 : indexOf(searchElement...(indexOf5After2); 执行结果 : 2、查找给定元素的最后一个索引 - lastIndexOf...() 调用 Array 数组对象 的 lastIndexOf() 方法 可以 查找给定元素的最后一个索引 , 语法如下 : lastIndexOf(searchElement) lastIndexOf(...就是 在数组中 最后一个 被找到的 指定元素的 索引位置 , 如果没有找到返回 -1 ; 参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

    1.7K10
    领券