前言最近的项目需要搜索引擎。由于之前一直不了解,所以整理了一下搜索引擎的相关概念知识。如果要查找文本中的数据,就不能避免搜索,也离不开搜索引擎。百度和谷歌是非常庞大和复杂的搜索引擎,它们索引了几乎所有在互联网上打开的网页和数据。但是对于我们自己的业务数据来说,肯定没有必要使用这么复杂的技术。如果我们想实现自己的搜索引擎,方便存储和检索,我们可以快速存储、搜索和分析海量数据。有很多种搜索引擎。这里主要说说两个比较流行的搜索引擎框架,Elasticsearch和Lucene搜索引擎。一、搜索引擎实现的核心Lucene/Elasticsearch快速搜索的核心是倒排索引。Lucene/Elasticsearch就是将磁盘的内容尽可能的移动到内存中来减少随机磁盘读取的次数(同时也利用了磁盘顺序读取的特性),结合各种压缩算法,高效的使用内存,从而实现快速搜索的特点。核心概念:https://www.cnblogs.com/valor...https://blog.csdn.net/sinat_4...2、Lucene搜索引擎百度百科:是Apache软件基金会4Jakarta项目组一个子项目是一个开源的全文搜索引擎工具包(实际上是一个Jar包),但它不是一个完整的全文搜索引擎,而是一个提供完整的查询引擎和索引引擎的全文搜索引擎架构.Lucene是一个不包含搜索引擎系统的信息检索工具包。包括索引结构、读写索引工具、关联工具、排序等功能。所以,在使用Lucene的时候,还是需要注意搜索引擎系统,比如数据的获取,分析,分词等东西。Lucene为全文索引和搜索提供了一个简单而强大的API。Lucene,最先进、最强大的搜索库,直接基于Lucene开发。很复杂,Api复杂(实现一些简单的功能,写了很多java代码),需要深入理解原理(各种索引结构)。Lucene只是一个库。要使用它,您必须使用Java作为开发语言并将其直接集成到您的应用程序中。更糟糕的是,Lucene的配置和使用都非常复杂,你需要对检索有很深的了解才能理解它是如何工作的。工作。3、ElasticSearch搜索引擎百度百科:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个基于RESTfulWeb界面的分布式多用户全文搜索引擎。Elasticsearch使用Java语言开发并根据Apache许可条款作为开源发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算,实现实时搜索,稳定、可靠、快速,安装使用方便。ElasticSearch的实现原理主要分为以下几个步骤。首先,用户将数据提交到ElasticSearch数据库,然后使用分词控制器对相应的句子进行分词,并将其权重和分词结果存储到数据中。当用户搜索收集数据时,根据权重对结果进行排序打分,将返回的结果呈现给用户。Elasticsearch基于Lucene,隐藏复杂性,提供简单易用的RestfulApi接口、JavaApi接口(以及其他语言的Api接口)、分布式文档存储引擎、分布式搜索引擎和分析引擎,支持PB级数据4。Lucene和ElasticSearch的优缺点比较这两个搜索引擎各有特点。现在总结一下:联系方式:ElasticSearch对Lucene进行了封装,使用起来更加方便。ElasticSearch除了拥有Lucene的所有优点外,它还有自己的优点:可用性:支持集群无单点障碍,可扩展性:支持集群扩展-高并发在集群环境下使用:大型项目使用ElasticSearch全文搜索服务器,所有项目统一访问索引服务器,支持集群环境项目必须集成Lucene全文搜索引擎工具包,不能在集群环境下使用。ElasticSearch支持多种语言,而Lucene只支持javaElasticSearch简单,都是http请求,而Lucene复杂,需要调用API进行大量操作。一般中小型项目使用Lucene,ElasticSearch适用(大中小型),因为ES支持在集群环境下使用,本身也支持集群。Luncene需要二次开发才能使用。不能像百度、谷歌那样,只是提供一个接口,需要实现后才能使用。直接使用ElasticSearch。封装了更高级的功能,比如聚合分析的功能,基于地理位置的搜索ES可以自动将海量数据分散到多台服务器进行存储和检索Elasticsearch常用的三种方式:JavaAPI这种方式是基于TCP的和ES通信。官方已经明确表示TransportClient客户端在ES7.0会被弃用,8.0会彻底移除,所以不推荐使用。上面的方法1RESTClient是基于TCP和ES通信的(以后会放弃TransPort。。。),官方也提供了基于HTTP的客户端RESTClient(推荐),官方RESTClient有JavaLowLevelRESTClient和JavaHightLevelRESTClient是两种,前者兼容ES所有版本,后者基于前者开发,只暴露部分API,待完善Spring-Data-Elasticsearch(推荐)另外针对以上方法,Spring还提供了一套基于SpringData实现的解决方案Spring-Data-Elasticsearch。为什么推荐这个,因为Spring通过这种方式为我们封装了常用的es操作。和使用Jpa操作数据库一样方便。在ES中,一个Index可以理解为一个库,一个Type就是一个表,一个Index可以对应多个Type,或者一个Index只能对应一个Type(6.0.0以后一对一)。6、Elasticsearch的安装从网上下载Elasticsearch的安装包后,直接解压,进入bin目录,双击执行Elasticsearch.bat,看到Started即表示启动成功。打开浏览器测试一下,输入http://localhost:9200/,就成功了。Elasticsearch-Head插件Elasticsearch-Head将是一个专门针对Elasticsearch的客户端工具,类似于Mysql的Sqlyog或Navicat数据库软件可视化界面。运行head插件:grunt服务器访问:localhost:91007、ElasticSearch实现联表查询SpringBoot集成ElasticSearch+父子查询相关链接:https://blog.csdn.net/a_lllk/...的类型及映射关系亲子关系应该提前建立好。以下是三种实现方式:嵌套查询:文档包含嵌套类型的字段。这些字段用于索引数组对象,其中每个对象都可以作为单独的文档检索(使用嵌套查询)。父子查询Has_Child和Has_Parent:父子关系可以存在于单个索引中的两种文档类型之间。has_child查询返回其子文档与指定查询匹配的父文档。而has_parent查询返回其父项与指定查询匹配的子文档。(类似于主键和外键)要点:父子关系元数据映射用于保证查询时的高性能,但有一个限制,即父子数据必须存在于应用层连接的分片中。8、Nested和Parent-Child的区别以及嵌套查询和父子查询的主要区别:由于存储结构的不同,Nested和Parent-Child有不同的应用场景。所有嵌套实体都存储在同一个文档中。Parent-Child模式下,子Type和父Type存放在不同的文档中。所以Nested的查询效率比Parent-Child高,但是在更新的时候,Nested模式下,ElasticSearch会删除整个文档并重新创建,而Parent-Child只会删除你更新的文档并重新创建,不会影响其他文件。所以Parent-Child的更新效率要比Nested高。嵌套查询和父子查询的具体使用场景:嵌套:当有少量不经常变化的子文档时使用。例如:一个订单中的商品,一个订单不可能有几千种不同的商品,一般不会很多,而且一旦下单,订购的商品就无法更新。Parent-Child:当文档数量较多,会经常变化时使用。比如:用户的浏览记录,浏览记录会很大,而且会经常更新哦。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以加入我的行列,把这本电子书做得更加完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
