热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

masteringelasticsearch

概念:Term:它是搜索的基本单位,其表现形式为文本中的一个词。Token:它是单个Term在所属Field中文本的呈现形式,包含了Ter

概念:

Term: 它是搜索的基本单位,其表现形式为文本中的一个词。
Token: 它是单个Term在所属Field中文本的呈现形式,包含了Term内容、Term类型、Term在文本中的起始及偏移位置。 

倒排索引结构(简单版):

此 外,每个词映射着一个数值(Count),它代表着Term在文档集中出现的频繁程度。 

| Term | count | Docs |

| Cookbook | 1 | <3> |

指 Cookbook在文档3中出现一次。当然&#xff0c;Lucene创建的真实索引远比上文复杂和先进 

 

每个索引被分成了多个段(Segment)&#xff0c;段具有一次写入&#xff0c;多次读取的特点。只要形成了&#xff0c; 段就无法被修改。例如:被删除文档的信息被存储到一个单独的文件&#xff0c;但是其它的段文件并 没有被修改。 

 

文本分析工作由analyzer组件负责。analyzer由一个分词器(tokenizer)和0个或者多个过 滤器(filter)组成,也可能会有0个或者多个字符映射器(character mappers)组成。

Lucene中的tokenizer用来把文本拆分成一个个的Token。Token包含了比较多的信息&#xff0c; 比如Term在文本的中的位置及Term原始文本&#xff0c;以及Term的长度。 

 

如果用户的Document中有title和description 两个Field&#xff0c;那么这两个Field可以指定不同的analyzer。 

 

有的Query对象会被解析(analyzed)&#xff0c;有的不会&#xff0c;比如:前缀查询(prefix query)就不会被解析&#xff0c;精确匹配查询(match query)就会被解析。对用户来说&#xff0c;理解这一点至 关重要。 

 

一个Query对象中会存在多个布尔运算符&#xff0c;这些布尔运算符将多个Term关联起来形成查询子 句。 

ElasticSearch 把数据分发到多个存储Lucene索引的物理机上。这些Lucene索引称为分片索引&#xff0c;这个分发的 过程称为索引分片(Sharding)。在ElasticSearch集群中&#xff0c;索引分片(Sharding)是自动完成的&#xff0c; 而且所有分片索引(Shard)是作为一个整体呈现给用户的。需要注意的是&#xff0c;尽管索引分片这个 过程是自动的&#xff0c;但是在应用中需要事先调整好参数。因为集群中分片的数量需要在索引创建 前配置好&#xff0c;而且服务器启动后是无法修改的&#xff0c;至少目前无法修改。 

 

在运行的过程中&#xff0c;ElasticSearch会收集集群的状态、索引的参数等信息。这些数据被存 储在Gateway中。 

 

ES背后的核心理念:

自动容错。ElasticSearch通过P2P网络进行通信&#xff0c;这种工作方式消除了单点故障。节点 自动连接到集群中的其它机器&#xff0c;自动进行数据交换及以节点之间相互监控。索引分片 

ElasticSearch是构建在极少数的几个概念之上的。ElasticSearch的开发团队希望它能够 快速上手&#xff0c;可扩展性强。而且这些核心特性体现在ElasticSearch的各个方面。从架构的角度 来看&#xff0c;这些主要特性是:

开箱即用。安装好ElasticSearch后&#xff0c;所有参数的默认值都自动进行了比较合理的设置&#xff0c; 基本不需要额外的调整。包括内置的发现机制(比如Field类型的自动匹配)和自动化参数配 置。

天生集群。ElasticSearch默认工作在集群模式下。节点都将视为集群的一部分&#xff0c;而且在 启动的过程中自动连接到集群中。

自动容错。ElasticSearch通过P2P网络进行通信&#xff0c;这种工作方式消除了单点故障。节点 自动连接到集群中的其它机器&#xff0c;自动进行数据交换及以节点之间相互监控。索引分片

扩展性强。无论是处理能力和数据容量上都可以通过一种简单的方式实现扩展&#xff0c;即增添 新的节点。

近实时搜索和版本控制。由于ElasticSearch天生支持分布式&#xff0c;所以延迟和不同节点上数 据的短暂性不一致无可避免。ElasticSearch通过版本控制(versioning)的机制尽量减少问 题的出现。 

 

在集群中&#xff0c;一个节点被选举成主节点(master node)。这个节点负责管理集群的状态&#xff0c;当 群集的拓扑结构改变时把索引分片分派到相应的节点上。 

主节点在ElasticSearch中并没有占据着重要的地位 

 

任何节点都可以并发地把查询子句分发到其它的节点&#xff0c;然后合并各个节点返回的查询结果

对于每个丢失的主分片&#xff0c;新的主分片将从剩余的分片 副本(Replica)中选举出来 

主节点向其它的节点发送Ping命令然后等待回应。如果没有得 到回应(实际上可能得不到回复的Ping命令个数取决于用户配置)&#xff0c;该节点就会被移出集群。 

 

如果索引数据的请求发送到的节点没有合适的分片或者分片是副本&#xff0c;那 么请求会被转发到含有主分片的节点。 

 

Lucene默认的打分机制:TF/IDF(term frequency/inverse document frequecy)算法 

 

基本上&#xff0c;从前面的公式中可以提炼出以下的几个规则:

匹配到的关键词越稀有&#xff0c;文档的得分就越高。

文档的域越小(包含比较少的Term)&#xff0c;文档的得分就越高。

设置的权重(索引和搜索时设置的都可以)越大&#xff0c;文档得分越高。 

 

索引分片机制用来存储超过单个节点存储容量的数据&#xff0c;分片副本用来应对不断攀升的吞 吐量以及确保数据的安全性 

 

路由功能向ElasticSearch提供一种信息来决定哪些分片用于存储和 查询 

 

一个重要的配置项&#xff1a;

cluster.routing.allocation.awareness.attributes:group 

 

决定新节点加入集群后&#xff0c;如何将p/r shard重新分配。

 

在集群中使用了shard allocation awareness功能后&#xff0c;ElasticSearch不会把决定allocation awareness的属性(在本例中是 node.group值)相同的分片或者分片副本分配到同一个节点中。该功能典型的用例是把集群拓 扑结构部署到物理机或者虚拟机时&#xff0c;确保你的集群不会出现单点故障问题。 

分片分配机制不会考虑分配分片到没有设 置node.group属性的节点。 

 

index.routing.allocation.total\_shards\_per\_node属性值为1&#xff0c;这意味着对于每个索引&#xff0c; ElasticSearch只会在单个节点上分配一个分片。这应用到我们的4-节点集群的例子中就是每 个节点会平均分配所有的分片。 

 

对于ElasticSearch来说&#xff0c;最核心的一种配置就是集群恢复配置 

 

重新索引&#xff1a;

第二个想法是创建第二个索引&#xff0c;并且添加数据&#xff0c;然后把应用接口调转到新的索 引。方案可行&#xff0c;但是有个小问题&#xff0c;创建新的索引需要额外的空间开销。 

 

我们已经多次提到&#xff0c;ElasticSearch创建的目的就是对应集群工作环境。这是跟与 ElasticSearch功能类似的其它开源解决方案(比如solr)主要的不同点。其它解决方案也许同样 能或难或易地应用于多节点的分布式环境&#xff0c;但是对对于ElasticSearch来说&#xff0c;工作在分布式环 境就是它每天的生活。由于节点发现机制&#xff0c;它最大程度简化了集群的 安装和配置。

该发现机制主要基于以下假设: 集群由cluster.name设置项相同的节点自动连接而成。 这就允许了同一个网段中存在多个独立的集群。自动发现机制的缺点在于:如果有人忘记改 变cluster.name的设置项&#xff0c;无意中连接到其它的某个集群。在这种情况下&#xff0c;ElasticSearch可能 出于重新平衡集群状态的考虑&#xff0c;将一些数据移动到了新加入的节点。当该节点被关闭&#xff0c;节点 所在的集群中会有部分数据像出现魔法一样凭空消失。 

 

Zen发现机制的故障检测

ElasticSearch运行时会启动两个探测进程。一个进程用于从主节点向集群中其它节点发 送ping请求来检测节点是否正常可用。另一个进程的工作反过来了&#xff0c;其它的节点向主节点发送 ping请求来验证主节点是否正常且忠于职守。 

 

数据迁移怎么做&#xff1a;

 

为了完成上述的操作&#xff0c;需要执行如下的步 骤:

停止发生在ElasticSearch集群中的数据索引操作(这可能意味着停止rivers或者任何向 ElasticSearch集群发送数据的应用)

用Flush API刷新所有还没有提交的数据。

 

为集群中的每一个分片至少创建一个拷贝&#xff0c;万一出现问题&#xff0c;也能找回数据。当然&#xff0c;如果希望尽可能简单地解决问题&#xff0c;也可以复制整个集群中每个节点的所有数据作为备用集群。



 


转:https://www.cnblogs.com/gm-201705/p/8444849.html



推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 本文总结了淘淘商城项目的功能和架构,并介绍了传统架构中遇到的session共享问题及解决方法。淘淘商城是一个综合性的B2C平台,类似京东商城、天猫商城,会员可以在商城浏览商品、下订单,管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。商城的架构包括后台管理系统、前台系统、会员系统、订单系统、搜索系统和单点登录系统。在传统架构中,可以采用tomcat集群解决并发量高的问题,但由于session共享的限制,集群数量有限。本文探讨了如何解决session共享的问题。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了Nutch相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Lucene 全文检索技术入门
    一、搜索引擎的历史萌芽:Archie、Gopher起步:Robot(网络机器人)的出现与spider(网络爬虫)发展:excite、galax ... [详细]
  • 怎么提高ElasticSearch 索引速度
    这篇文章主要为大家展示了“怎么提高ElasticSearch索引速度”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
author-avatar
摇身一变鄙人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有