看了这篇文!你就知道是选 elasticsearch 还是 solr

什么是全文搜索引擎

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。

全文搜索引擎就是通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户。

全文检索技术,尤其是中文全文检索技术的研究始于1987年左右,已经有一些商品化的软件。Internet的普及使得全文检索技术日益成熟起来,其应用已突破传统的情报部门和信息中心的局限性,使该技术的最广大用户变成互联网的用户和桌面用户,而不再仅局限于情报检索专家。

全文检索技术以各类数据如文本、声音、图像等为对象,提供按数据的内容而不是外在特征来进行的信息检索,其特点是能对海量的数据进行有效管理和快速检索。它是搜索引擎的核心技术,同时也是电子商务网站的支撑技术。全文检索技术可应用于企业信息网站、媒体网站、政府站点、商业网站数字图书馆和搜索引擎中。我们知道,企业信息化是电子商务的基础,企业建立自己的商务站点,构建企业内部信息发布平台,并与其他网站间建立安全的信息发布通道和交换通道,建立电子商务的应用并以数据为中心建立应用平台等方面都离不开全文检索。该检索技术可跨越所有的数据源,支持多种数据和信息格式,对检索结果可按商业分类规则进行排列,也能满足用户特定的知识检索请求,将所有不同信息查询中的命中结果按相关性或分类排列,提供不同格式的信息浏览功能。

什么时候使用全文搜索引擎:

  1. 搜索的数据对象是大量的非结构化的文本数据。

  2. 文件记录量达到数十万或数百万个甚至更多。

  3. 支持大量基于交互式文本的查询。

  4. 需求非常灵活的全文搜索查询。

  5. 对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足。

  6. 对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。

Lucene,Solr, ElasticSearch

现在主流的搜索引擎大概就是:Lucene,Solr,ElasticSearch。

它们的索引建立都是根据 倒排索引 的方式生成索引,何谓倒排索引?

维基百科 倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。

Lucene

Lucene是一个Java全文搜索引擎,完全用Java编写。Lucene不是一个完整的应用程序,而是一个代码库和API,可以很容易地用于向应用程序添加搜索功能。

Lucene通过简单的API提供强大的功能:

可扩展的高性能索引

  • 在现代硬件上超过150GB /小时

  • 小RAM要求 - 只有1MB堆

  • 增量索引与批量索引一样快

  • 索引大小约为索引文本大小的20-30%

强大,准确,高效的搜索算法

  • 排名搜索 - 首先返回最佳结果

  • 许多强大的查询类型:短语查询,通配符查询,邻近查询,范围查询等

  • 现场搜索(例如标题,作者,内容)

  • 按任何字段排序

  • 使用合并结果进行多索引搜索

  • 允许同时更新和搜索

  • 灵活的分面,突出显示,连接和结果分组

  • 快速,内存效率和错误容忍的建议

  • 可插拔排名模型,包括矢量空间模型和Okapi BM25

  • 可配置存储引擎(编解码器)

跨平台解决方案

  • 作为Apache许可下的开源软件提供 ,允许您在商业和开源程序中使用Lucene

  • 100%-pure Java

  • 可用的其他编程语言中的实现是索引兼容的

Apache软件基金会 在Apache软件基金会提供的开源软件项目的Apache社区的支持。

但是Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene。需要很多的学习了解,才能明白它是如何运行的,熟练运用Lucene确实非常复杂

Solr

Apache Solr是一个基于名为Lucene的Java库构建的开源搜索平台。它以用户友好的方式提供Apache Lucene的搜索功能。作为一个行业参与者近十年,它是一个成熟的产品,拥有强大而广泛的用户社区。它提供分布式索引,复制,负载平衡查询以及自动故障转移和恢复。如果它被正确部署然后管理得好,它就能够成为一个高度可靠,可扩展且容错的搜索引擎。很多互联网巨头,如Netflix,eBay,Instagram和亚马逊(CloudSearch)都使用Solr,因为它能够索引和搜索多个站点。

主要功能列表包括:

  • 全文搜索

  • 突出

  • 分面搜索

  • 实时索引

  • 动态群集

  • 数据库集成

  • NoSQL功能和丰富的文档处理(例如Word和PDF文件)

ElasticSearch

Elasticsearch是一个开源(Apache 2许可证),是一个基于Apache Lucene库构建的RESTful搜索引擎。

Elasticsearch是在Solr之后几年推出的。它提供了一个分布式,多租户能力的全文搜索引擎,具有HTTP Web界面(REST)和无架构JSON文档。Elasticsearch的官方客户端库提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript。

分布式搜索引擎包括可以划分为分片的索引,并且每个分片可以具有多个副本。每个Elasticsearch节点都可以有一个或多个分片,其引擎也可以充当协调器,将操作委派给正确的分片。

Elasticsearch可通过近实时搜索进行扩展。其主要功能之一是多租户。

主要功能列表包括:

  • 分布式搜索

  • 多租户

  • 分析搜索

  • 分组和聚合

ES的流行度

DB-Engines(一家收集和统计数据库管理系统信息的机构,网址:https://db-engines.com/en/ranking/search+engine)上的搜索引擎排名:

uploading.4e448015.gif转存失败重新上传取消

ES特性

速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。

分布式:横向扩展非常灵活 全文检索:基于lucene的强大的全文检索能力; 近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析 高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据 模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。 RESTful API:JSON + HTTP

ES架构介绍

Gateway是ES用来存储索引的文件系统,支持多种类型。 Gateway的上层是一个分布式的lucene框架。 Lucene之上是ES的模块,包括:索引模块、搜索模块、映射解析模块等 ES模块之上是 Discovery、Scripting和第三方插件。Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。Scripting用来支持在查询语句中插入javascript、python等脚本语言,scripting模块负责解析这些脚本,使用脚本语句性能稍低。ES也支持多种第三方插件。 再上层是ES的传输模块和JMX.传输模块支持多种传输协议,如 Thrift、memecached、http,默认使用http。JMX是java的管理框架,用来管理ES应用。 最上层是ES提供给用户的接口,可以通过RESTful接口和ES集群进行交互。

img

ES的历史

多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。

直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。

后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。

第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。

Shay的妻子依旧等待着她的食谱搜索……

为了搜索,你懂的

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索

  • 分布式的实时分析搜索引擎

  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

    (ps:计算机储存单位 bit、B、KBMBGBTB、PB、EB、ZB…)

而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。

上手Elasticsearch非常容易。它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。

Elasticsearch在Apache 2 license下许可使用,可以免费下载、使用和修改。

随着你对Elasticsearch的理解加深,你可以根据不同的问题领域定制Elasticsearch的高级特性,这一切都是可配置的,并且配置非常灵活。

img

正排索引

正排索引也称为"前向索引",它是创建倒排索引的基础。

img

二叉树查找效率是logN,同时插入新的节点不必移动全部节点,所以用树型结构存储索引,能同时兼顾插入和查询的性能。因此在这个基础上,再结合磁盘的读取特性(顺序读/随机读),传统关系型数据库采用了B-Tree/B+Tree这样的数据结构做索引

(ps:mysql中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。)

优点:工作原理非常的简单。 缺点:检索效率太低,只能在一起简单的场景下使用。

倒排索引 (又反向索引)

上面的例子,Elasticsearch建立的索引大致如下:

name字段:

img

age字段:

img

gender字段:

img

address字段:

img

Elasticsearch分别为每个字段都建立了一个倒排索引。比如,在上面“张三”、“北京市”、22 这些都是Term,而[1,3]就是Posting List。Posting list就是一个数组,存储了所有符合某个Term的文档ID。

Term(单词):一段文本经过分析器分析以后就会输出一串单词,这一个一个的就叫做Term(直译为:单词)

Term Dictionary(单词字典):顾名思义,它里面维护的是Term,可以理解为Term的集合

Term Index(单词索引):为了更快的找到某个单词,我们为单词建立索引

Posting List(倒排列表):倒排列表记录了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。

PS:实际的倒排列表中并不只是存了文档ID这么简单,还有一些其它的信息,比如:词频(Term出现的次数)、偏移量(offset)等,可以想象成是Python中的元组,或者Java中的对象

PS:如果类比现代汉语词典的话,那么Term就相当于词语,Term Dictionary相当于汉语词典本身,Term Index相当于词典的目录索引

https://img2018.cnblogs.com/blog/874963/201901/874963-20190127184959667-1135956344.pnghttps://img2018.cnblogs.com/blog/874963/201901/874963-20190127185725607-2022920549.png

ES 基础概念

近实时搜索(Near Real-Time Search )

随着逐段搜索的发展,为文档建立索引与使其显示为可见之间的延迟大大减少了。几分钟之内就可以搜索到新文档,但这还不够快。

在Elasticsearch中,这种轻巧的编写和打开新段的过程称为refresh。默认情况下,每个分片每秒自动刷新一次。这就是为什么我们说Elasticsearch具有 几乎实时的搜索功能:文档更改不可见,无法立即搜索,但是会在1秒钟内可见。(ps:从索引一个文档到这个文档可被搜索只需要一点点的延迟,这个时间一般为毫秒级。)

节点(Node)

每当您启动Elasticsearch实例时,您都在启动node。连接的节点的集合称为群集。如果您正在运行Elasticsearch的单个节点,那么您将拥有一个节点的集群。从单个节点的默认情况下会形成一个新的单节点名为"elasticsearch"的集群。

默认情况下,群集中的每个节点都可以处理HTTP传输流量。传输层专门用于节点之间的通信。HTTP层由REST客户端使用。

所有节点都知道群集中的所有其他节点,并且可以将客户端请求转发到适当的节点。

节点是单个服务器实例,它是群集的一部分,可以存储数据,并参与群集的索引和搜索功能。就像一个集群,节点的名称默认为一个随机的通用唯一标识符(UUID),确定在启动时分配给该节点。如果不希望默认,可以定义任何节点名。这个名字对管理很重要,目的是要确定你的网络服务器对应于你的ElasticSearch群集节点。

我们可以通过群集名配置节点以连接特定的群集。默认情况下,每个节点设置加入名为“elasticSearch”的集群。这意味着如果你启动多个节点在网络上,假设他们能发现彼此都会自动形成和加入一个名为“elasticsearch”的集群

集群 (cluster)

elasticesearh 提供至少一台节点服务的集群,拥有所有数据集,提供联合索引和检索能力。 “elasticsearch”是整个集群的唯一名字。而这个名字的重要性是如果一个节点想成为集群中一个节点,那创建节点后只能通过集群的名字加入这个集群中。这也确保了你不同环境(生产环境、测试环境、开发环境)不能重复利用同一个集群名字,否则 会导致“节点”加入错的环境。 一般来说,我们创建logging-dev,logging-stage,loggin-prod 分别是开发环境,预生成环境,生产环境集群。 注意它是有效的,完全可以只有一个集群节点。此外,你也可以有多个独立集群,每个集群都有自己独特的集群名称。

索引(Index)

索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。

类型(Type)

一个索引可以有多个类型。例如一个索引下可以有文章类型,也可以有用户类型,也可以有评论类型。在一个索引中不能再创建多个类型,在以后的版本中将删除类型的整个概念。

在Elasticsearch 7.0.0或更高版本中创建的索引不再接受 _default_映射。在6.x中创建的索引将继续像以前一样在Elasticsearch 6.x中运行。在7.0中的API中不推荐使用类型,对索引创建,放置映射,获取映射,放置模板,获取模板和获取字段映射API进行重大更改。

文档(Document)

文档是可以被索引的信息的基本单位。例如,您可以为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。本文件的表示形式为JSON(JavaScript Object Notation)格式,这是一种非常普遍的互联网数据交换格式。

在索引/类型中,您可以存储尽可能多的文档。请注意,尽管文档物理驻留在索引中,文档实际上必须索引或分配到索引中的类型。

分片与副本( Shards & Replicas)

索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。

为了解决这一问题,Elasticsearch提供细分你的指标分成多个块称为分片的能力。当你创建一个索引,你可以简单地定义你想要的分片数量。每个分片本身是一个全功能的、独立的“指数”,可以托管在集群中的任何节点。

Shards分片的重要性主要体现在以下两个特征:

  • 分片允许您水平拆分或缩放内容的大小

  • 分片允许你分配和并行操作的碎片(可能在多个节点上)从而提高性能/吞吐量 这个机制中的碎片是分布式的以及其文件汇总到搜索请求是完全由ElasticSearch管理,对用户来说是透明的。

在同一个集群网络或云环境上,故障是任何时候都会出现的,拥有一个故障转移机制以防分片和结点因为某些原因离线或消失是非常有用的,并且被强烈推荐。为此,Elasticsearch允许你创建一个或多个拷贝,你的索引分片进入所谓的副本或称作复制品的分片.

副本的重要性主要体现在以下两个特征:

  • 副本为分片或节点失败提供了高可用性。为此,需要注意的是,一个副本的分片不会分配在同一个节点作为原始的或主分片,副本是从主分片那里复制过来的。

  • 副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上并行执行。

ES和数据库关系对比

img

  • 由于易于使用,Elasticsearch在新开发者中更受欢迎。但是,如果您已经习惯了与Solr合作,请继续使用它,因为迁移到Elasticsearch没有特定的优势。

  • 如果除了搜索文本之外还需要它来处理分析查询,Elasticsearch是更好的选择。

  • 如果需要分布式索引,则需要选择Elasticsearch。对于需要良好可伸缩性和性能的云和分布式环境,Elasticsearch是更好的选择。

  • 两者都有良好的商业支持(咨询,生产支持,整合等)

  • 两者都有很好的操作工具,尽管Elasticsearch因其易于使用的API而更多地吸引了DevOps人群,因此可以围绕它创建一个更加生动的工具生态系统。

  • Elasticsearch在开源日志管理用例中占据主导地位,许多组织在Elasticsearch中索引它们的日志以使其可搜索。虽然Solr现在也可以用于此目的,但它只是错过了这一想法。

  • Solr仍然更加面向文本搜索。另一方面,Elasticsearch 通常用于过滤和分组 - 分析查询工作负载 - 而不一定是文本搜索。Elasticsearch 开发人员在 Lucene 和 Elasticsearch 级别上投入了大量精力使此类查询更高效(降低内存占用和CPU使用)。因此,对于不仅需要进行文本搜索,而且需要复杂的搜索时间聚合的应用程序,Elasticsearch是一个更好的选择。

  • Elasticsearch更容易上手,一个下载和一个命令就可以启动一切。Solr传统上需要更多的工作和知识,但Solr最近在消除这一点上取得了巨大的进步,现在只需努力改变它的声誉。

  • 在性能方面,它们大致相同。我说“大致”,因为没有人做过全面和无偏见的基准测试。对于95%的用例,任何一种选择在性能方面都会很好,剩下的5%需要用它们的特定数据和特定的访问模式来测试这两种解决方案。

  • 从操作上讲,Elasticsearch使用起来比较简单 - 它只有一个进程。Solr在其类似Elasticsearch的完全分布式部署模式SolrCloud中依赖于Apache ZooKeeper。ZooKeeper是超级成熟,超级广泛使用等等,但它仍然是另一个活跃的部分。也就是说,如果您使用的是Hadoop,HBase,Spark,Kafka或其他一些较新的分布式软件,您可能已经在组织的某个地方运行ZooKeeper。

  • 虽然Elasticsearch内置了类似ZooKeeper的组件Xen,但ZooKeeper可以更好地防止有时在Elasticsearch集群中出现的可怕的裂脑问题。公平地说,Elasticsearch开发人员已经意识到这个问题,并致力于改进Elasticsearch的这个方面。

  • 如果您喜欢监控和指标,那么使用Elasticsearch,您将会进入天堂。这个东西比新年前夜在时代广场可以挤压的人有更多的指标!Solr暴露了关键指标,但远不及Elasticsearch那么多。

img

ES增删改查

添加 更新:POST PUT

localhost:9200/test/user/1

{ "name" : "张小军", "mobile" : "1866666666", "code" : "1111111", "balance" : 100000023213213 }

{ "name": "陈小明", "mobile": "187777777", "code": "222222222", "balance": 23165498795131564643213 }

返回:

{ "index": "test", --------------------------相当于库名 "type": "user", --------------------------相当于表名 "id": "1", --------------------------相当用户id "version": 8, --------------------------相当oracle的版本,也就是更新次数 "result": "updated", --------------------------本次操作 "shards": { --------------------------执行请求时的分片信息 "total": 2, --------------------------分片数量 "successful": 1, --------------------------成功返回结果的分片数量 "failed": 0 --------------------------失败的分片数量 }, "seq_no": 8, --------------------------严格递增的顺序号,任何类型的写操作,包括index、create、update和Delete,都会生成一个_seq_no。

"primary_term": 4 每当Primary Shard发生重新分配时,比如重启,Primary选举等,primary_term会递增1。 }

删除:DELETE

{ "index": "test", "type": "user", "id": "1", "version": 10, "result": "deleted", "shards": { "total": 2, "successful": 1, "failed": 0 }, "seq_no": 13, "_primary_term": 4 }

查:GET

localhost:9200/test/user/1

拼接id 跟进id进行查询

{ "index": "test", "type": "user", "id": "1", "version": 1, "seq_no": 14, "primary_term": 4, "found": true, "_source": { "name": "张小军", "mobile": "1866666636", "code": "1111111", "balance": 100000023213213 } }

localhost:9200/test/user/_search?q=name:明

根据字段查询

{ "took": 2, ---------------------------- 请求花了多少时间 "timed_out": false, ---------------------------- 有没有超时 "shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1.2039728,------------------------最高的匹配程度 "hits": [ { "index": "test", "type": "user", "id": "2", "score": 1.2039728, "source": { "name": "陈小明", "mobile": "1866666666", "code": "1111111", "balance": 100000023213213 } } ] } }

如果不拼接?q= 查询user 所有记录

localhost:9200/_search 搜索 所有类型的所有记录

localhost:9200/test/_search在test 索引中搜索所有类型

{ "took": 1, "timed_out": false, "shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 1, "hits": [ { "index": "test", "type": "user", "id": "2", "score": 1, "source": { "name": "陈小明", "mobile": "1866666666", "code": "1111111", "balance": 100000023213213 } }, { "index": "test", "type": "user", "id": "3", "score": 1, "source": { "name": "刘小飞", "mobile": "188888888888", "code": "666666", "balance": 8888888888888 } }, { "index": "test", "type": "user", "id": "1", "score": 1, "source": { "name": "张小军", "mobile": "1866666636", "code": "1111111", "balance": 100000023213213 } } ] } }

ES必要插件

Elasticsearch-Head

elasticsearch-head 是一个界面化的集群操作和管理工具

img

Kibana

Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图标的形式展现出来。

Kibana 的使用场景,应该集中在两方面:

实时监控 通过 histogram 面板,配合不同条件的多个 queries 可以对一个事件走很多个维度组合出不同的时间序列走势。时间序列数据是最常见的监控报警了。 问题分析 关于 elk 的用途,可以参照其对应的商业产品 splunk 的场景:使用 Splunk 的意义在于使信息收集和处理智能化。而其操作智能化表现在:

搜索,通过下钻数据排查问题,通过分析根本原因来解决问题; 实时可见性,可以将对系统的检测和警报结合在一起,便于跟踪 SLA 和性能问题; 历史分析,可以从中找出趋势和历史模式,行为基线和阈值,生成一致性报告。

Marvel

Marvel插件:在簇中从每个节点汇集数据。这个插件必须每个节点都得安装。 Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。它包含了一个叫做Sense的交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。

logstash

logstash是一个用来管理事件和日志的工具,它的作用是收集日志,解析日志,存储日志为以后使用。

graph

graph插件一个新的用于 Elasticsearch 和 Kibana 的插件,通过它们您可以很方便的发现、理解和探索现有数据之间的关系。

和 Elastic 的所有产品一样,它的 UI 界面设计简单易用,API 接口丰富强大,借助于 Elastic 在相关性评分的丰富经验,挖掘出您数据中最有价值的关系信息。这种独特的图形探索方式,并且无需引入新的索引格式,允许用户直接查询现有的数据,为 Elastic Stack 打开了一个新的更广泛的使用场景。

Graph 让一些复杂问题和场景(如行为分析、反欺诈、网络安全、药物发现、个性化医疗,或者基于持续的实时数据构建个性化推荐)的处理变得简单。Graph 通过相关性评分计算分离噪音和有用信息,自动识别最重要的这些关系。由于构建于 Elasticsearch 之上,Graph 天然具备高可用和近实时的能力。

IK

IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包,最初的时候,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件,从3.0版本之后,IK逐渐成为面向java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现,IK实现了简单的分词 歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

发布了67 篇原创文章 · 获赞 96 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_38380025/article/details/105356620