solr cloud 更新 solrconfig 配置_Solr各版本新特性「4.x,5.x,6.x,7.x」

c1260cba3ca437f4a75878281af937a4.png

一.Solr4.x新特性

  1.近实时搜索

  Solr的近实时搜索【Near Real-Time,NRT】功能实现了文档添加到搜索的快速进行,以应对搜索快速变化的数据。

  2.原子更新与乐观并发

  原子更新功能允许客户端应用对已有文档上进行添加、更新、删除和对字段增值等操作,而且无需重新发送整个文档。当存在两个请求同时更改同一个文档时,Solr使用乐观机制防止不兼容的更新。简单来说就是Solr使用特殊的_version_版本字段来确保文档的安全更新语义。两个请求中后提交更改的请求将会获得一个过时的版本【这个版本是两请求都未执行之前的版本,然后先提交的请求会执行并修改版本号】,所以会执行失败【请求执行之前需要先确认版本,只有版本一致才可以执行请求】。

  3.实时GET功能

  无论文档是否已经提交到索引,使用实时GET功能都可以使用唯一标识符检索最新版本的索引【事务日志提供支撑】。这与使用行键【row key】检索数据的Cassandra的键-值存储方式类似。在Solr4之前,除非文档提交到Lucene的索引,否则是检索不出来的。且提交很花费时间,影响查询性能。

  4.使用事务日志实现写持续性

  当文档发送到Solr进行索引时,会被写到事务日志中,以防止服务器发生故障造成数据丢失。Solr的事务日志处在客户端应用与Lucene索引之间,对实时GET功能提供必要的支持,使其可以不考虑文档是否已经提交到Lucene,直接通过唯一标识符进行检索文档。Solr的事务日志解除了更新可见性与更新持久性之间的绑定。也就是说,文档可以持久存储,但不出现在搜索结果中。事务日志可以控制提交的文档在搜索结果中出现的时机,避免在提交之前因服务器出现故障而导致数据丢失。

  5.使用Zookeeper实现简易分片和复制

  在Solr4.x之前,需手动进行扩容。在Solr4.x之后,SolrCloud让扩容变得简单和自动化。在Solr中,Zookeeper负责指定分片代表与分片副本,并对服务请求可用的服务器机芯跟踪。SolrCloud与Zookeeper是绑定的,因此SolrCloud的启动无需做任何额外的配置和安装。

  6.在以前的版本中,Solr主目录有配置文件solr.xml进行配置。从Solr4.4之后,内核可以被自动发现,不再需要在solr.xml中进行配置。

二.Solr5.x新特性

  1.schema文件改名为managed-schema。

  2.Solr4.x中的deprecated被去掉。

  3.从Solr5开始,Solr不再以war的形式发布,Solr已然成为了一个独立的Java服务端应用,已经包括了start和stop脚本,并支持Unix和Windows平台。

  4.solr.xml中的单位从cores变为solrcloud。

  5.在Solr5.x中引入的Streaming表达式允许查询Solr并将结果作为数据流进行排序和聚合。

三.Solr6.x新特性

  1.对Solr5.x中引入的Streaming表达式增加几种新的表达式类型:

  >使用类似MapReduce的并行表达式来加快high-cardinality字段的吞吐量。

  >守护程序表达式以支持持续推送或拉取流。

  >高级并行关系代数,如分布式连接、交集、联合和补充。

  >发布/订阅消息。

  >用于从其他系统中提取数据并与Solr索引中的文档连接的JDBC连接。

  2.并行SQL接口

  构建在Streaming表达式的基础上,Solr6.x中的新增功能是一个并行SQL接口,可以将SQL查询发送到Solr。SQL语句被即时编译为Streaming表达式,提供可用于Streaming表达式请求的全部聚合。包含一个JDBC驱动程序,它允许使用SQL客户端和数据库可视化工具查询Solr索引并将数据导入到其它系统中。

  3.跨数据中心复制

  使用主动-被动模型,SolrCloud集群可以被复制到另一个数据中心,并用一个新的API进行监控。

  4.QueryParse图

  一个新的图形查询解释器可以使Solr文档建模的定向【循环】图的遍历查询成为可能。

  5.DocValues

  在Solr示例配置集中的大多数非文本字段类型现在默认为使用DocValues。

  6.需要使用Java8

  Solr6.x【SolrJ客户端】的Java最低支持的版本是Java8。

  7.索引格式更改

  Solr6.x不支持读取Lucene/Solr4.x以及更早版本的索引。如果索引中仍存在旧的4.x格式的字段,必须运行Solr5.x附带的Lucene IndexUpgrader。另外,使用Solr5.x充分优化索引,以确保只包含一个最新的索引段。

  8.默认为托管模式

  当solrconfig.xml没有明确定义时,Solr的默认行为依赖于solrconfig.xml定义的luceneMatchVersion。当luceneMatchVersion<6.0时,ClassicIndexSchemaFactory将继续用于向后兼容,否则将使用ManagedIndexSchemaFactory实例。这种变化最显著的影响是现有的solrconfig.xml文件内容被修改为luceneMatchVersion>=6.0,但没有明确配置ClassicIndexSchemaFactory,并将schema.xml文件自动升级为managed-schema文件。并且将默认启动通过Schema API进行的模式修改。

  9.默认的相似性改变

  当Schema没有明确地定义全局时,Solr的默认行为将依赖于solrconfig.xml中指定的luceneMatchVersion。当luceneMatchVersion<6.0时,将使用ClassicSimilarityFactory实例,否则将使用SchemaSimilarityFactory实例。可以在SchemaSimilarityFactory声明中指定defaultSimFromFiledType init选项来更改此行为。.值得注意的是,这种改变意味着用户可以利用每个字段类型的相似性声明,并且需要明确声明SchemaSimilaryFactory的全局用法。

  10.副本和碎片删除命令更改

  DELETESHARD和DELETEREPLICA修改为默认删除任何复制副本的实例目录、数据目录和索引目录。

  11.删除facet.date.*参数

  Solr3.x中被废弃的facet.date参数【以及相关facet.date.*参数】已被完全删除。

四.Solr7.x新特性

  1.复制模式

  直到Solr7.x,SolrCloud模型允许任何复制副本在领导者丢失时成为领导者。这对大多数用户来说非常有效,在集群出现问题的情况下提供可靠的故障切换。但是,由于所有副本必须在任何时候都保持同步,因此在大型集群中需要付出代价【副本本身就需要保持同步】。为了提供更多的灵活性,已经添加两种新类型的副本,TLOG&PULL。这些新类型提供了一些选项,以便仅通过从前导项复制索引段与引线同步副本。TLOG类型还有一个额外的好处,就是其维护一个事务日志【名字叫tlog】,如果需要的话,它可以恢复并成为领导者。PULL类型不维护事务日志,因此不能成为领导者。作为这种改变的一部分,传统的副本现在被命名为NRT。如果没有明确定义TLOG或PULL副本,则Solr默认创建NRT副本。

  2.自动缩放

  Solr自动缩放是Solr中的一个新功能套件,用于管理SolrCloud集群更加简单和自动化。Solr自动缩放的核心是为用户提供一个规则语法来定义在集群中分发节点和碎片的首选项和策略,目的是在集群中保持平衡。从Solr7.x开始,Solr将在确定创建或移动各种Collection API命令的新碎片或副本放置到何处时考虑策略和首选项规则。

  3.新的默认配置集

  data_driven_configset与basic_configset已被删除,取而代之的是_defaultconfigset。sample_techproducts_configset还被保留了下来,专门与example/exampledocs目录中的Solr附带的示例文档一起使用。当创建一个新的collection时,如果不指定configSet,默认_default将被使用。如果使用SolrCloud,_defaultconfigSet会自动上传到zookeeper。如果使用单独模式,instanceDir将会自动创建,使用_defaultconfigSet作为基础。

Solr7.x之前的版本【以6.6版本为例】:

5af0e9501269b6ca0ce7cac6857850d7.png

Solr7.x版本:

94c4e80794328de9678bdd381e91be4b.png

4.无模式的改进

  默认情况下,传入的字段将被索引为text_general【可以修改】。该字段的名称将与文档中定义的字段名称相同。复制字段规则将被插入到模式中,以将新的text_general字段复制到具有名称的新字段。这个字段的类型是一个strings字段【允许多值】。默认文本字段的前256【可以修改】个字符将被插入到新的字符串字段中。

由于复制字段规则会降低索引的速度并增加索引大小,所以建议只在需要时使用复制字段。如果不需要对字段进行排序或分面,则应该删除自动生成的复制字段规则。可以禁用update.autoCreateFields属性禁用自动字段创建。使用命令修改配置:curl http://host:8983/solr/mycollection/config -d '{"set-user-property":{"update.autoCreateFields":"false"}}'。

  5.对默认行为的更改

  >JSON现在是默认的响应格式。如果依赖XML响应,现在必须在请求中定义:wt=xml。另外,行缩进是默认启用的【indent=on】。

  >sow参数【Split on Whitespace】现在默认为false,允许支持多字同义词。该参数与eDismax和standard/lucene查询解析器一起使用。如果此参数没有明确指定为true,查询文本将不会在空白上拆分。

  >legacyCloud参数现在默认为false。如果副本的项不存在state.json,则该副本将不会被注册。这可能会影响到复制副本的用户,并自动将其注册为分片的一部分。通过使用一下命令在集群属性中设置属性legacyCloud=true,可以退回到旧的行为。命令如下:./sever/scripts/cloud-scripts/zkcli.sh -zkhost 127.0.0.1:2181 -cmd clusterprop -name legacyCloud -val true。

  >如果solrconfig中的luceneMatchVersion是7.0.0或以上版本则eDismax查询分析器参数lowercaseOperator默认为false。luceneMatchVersion低于7.0.0的行为是不变的【true】。这意味着客户端必须以大写的方式发送布尔运算符【AND/OR/NOT】才能被识别,或者必须明确设置该参数为true。

  >如果luceneMatchVersion是7.0.0或以上版本,则solrconfig中的handleSelect参数默认为false。这会导致Solr忽略qt参数,如果它存在于请求中,请求处理程序没有前导'/',则可以设置handleSelect="true"或者考虑迁移配置。该qt参数仍用作指定要使用的请求处理程序的Solr特殊参数。

  >lucenePlusSort查询解析器【旧的lucene查询解析器】已被弃用,不再隐式定义。若想继续使用这个解析器直到Solr8【该版本将删除这个解析器】,必须将它注册到solrconfig.xml中。如下:。

  >TemplateUpdateRequestProcessorFactory名称从Template更改为template,AtomicUpdateProcessorFactory的名称从Atomic改为atomic,此外,TemplateUpdateRequestProcessorFactory现在使用{}而不是${}作为模板。

五.备注

  1.对于Solr升级,将数据重新编入索引被认为是最佳做法。如果重新索引不可行,请注意,Solr一次只能升级一个大版本【例如从6.x升级到7.x】。因此,Solr6.x索引与Solr7.x兼容,但Solr5.x索引则不会与Solr7.x兼容。

9d6fe8c82bf92e3f30a7531408c9ad8e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商系统的商品流水记录

商品销售流水 销售单变成“归档”之后&#xff0c;系统生成相关商品的销售流水记录&#xff0c;这里要考虑退货扣减的问题也可以不生成相应的流水记录&#xff0c;直接从销售子单取相关数据显示即可 商品出库流水 出库单变成“已出库”后&#xff0c;系统生成相关商品的出库…

junit数据驱动测试_使用Junit和Easytest进行数据驱动的测试

junit数据驱动测试在本文中&#xff0c;我们将看到如何使用Junit进行数据驱动的测试。 为此&#xff0c;我将使用一个名为EasyTest的库。 我们知道&#xff0c;对于TestNG&#xff0c;它已内置了数据提供程序。 通过简单的测试&#xff0c;我们可以使用Junit进行数据驱动的测试…

centos rpm安装mysql5.5_CentOS下以RPM方式安装MySQL5.5

首先去mySQL官网下载页面&#xff1a;http://dev.mysql.com/downloads/mysql/#downloadsSelect Platform 选择 Oracle & Red Hat Linux 4 & 5分别下载以下三个文件(由于我的机器是32位&#xff0c;下面是32位版本的包&#xff0c;如果你的机器是64位的请下载64位版本)…

HH SaaS电商系统的出库功能模块设计

文章目录出库单业务流程基本流程扩展流程找不到符合条件的仓库&#xff0c;要求部分退款&#xff08;未生成出库单时&#xff09;找不到符合条件的仓库&#xff0c;全部退款&#xff08;未生成出库单时&#xff09;找不到符合条件的仓库&#xff0c;等待库存补足&#xff08;未…

java 拼图_拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?

java 拼图JDK 9发行日期推迟到2017年7月 距JDK 9发行不到200天&#xff0c;它又被推迟了 。 新的发布日期已更新为2017年7月&#xff0c;比之前推迟的日期晚了四个月。 推迟日期 9月13日&#xff0c;Oracle Java平台小组的首席架构师Mark Reinhold发表了他的建议&#xff0c;…

mysql数据库增删改查关键字_mysql数据库的增删改查

数据库基本操作&#xff1a;增删改查#DML语言/*数据操作语言&#xff1a;插入&#xff1a;insert修改&#xff1a;update删除&#xff1a;delete*/1.增插入语句的方式一表已经存在啦&#xff0c;我们需要往里面插入数据/*语法&#xff1a;insert into 表名(列名,…) values(值1…

HH SaaS电商系统的采购功能模块设计

文章目录如何生成采购单系统生成采购单的流程基本流程扩展流程找不到符合条件的供应商&#xff0c;要求部分退款&#xff08;初次生成采购单时&#xff09;找不到符合条件的供应商&#xff0c;要求全部退款&#xff08;初次生成采购单时&#xff09;指定供应商的库存不足&#…

本地缓存防止缓存击穿_防止缓存爆炸的快速提示

本地缓存防止缓存击穿在很多情况下&#xff0c;您都可以从应用程序中的常用对象缓存中受益&#xff0c;特别是在面向Web和微服务的环境中。 您可以在Java中执行的最简单的缓存类型可能是引入一个私有HashMap&#xff0c;在计算对象之前先查询该哈希表&#xff0c;以确保您不会重…

php mysql导出csv文件_详解PHP导入导出CSV文件

我们先准备mysql数据表&#xff0c;假设项目中有一张记录学生信息的表student&#xff0c;并有id&#xff0c;name&#xff0c;sex&#xff0c;age分别记录学生的姓名、性别、年龄等信息。CREATE TABLE student (id int(11) NOT NULL auto_increment,name varchar(50) NOT NULL…

HH SaaS电商系统的入库功能模块设计

文章目录创建入库单的场景创建入库单的业务流程商品直接入库内部仓退货入库&#xff08;内部仓&#xff09;换货入库&#xff08;内部仓&#xff09;退货入库&#xff08;外部仓&#xff09;换货入库&#xff08;外部仓&#xff09;备货入库&#xff08;内部仓&#xff09;备货…

aws ecr_在ECR上推送Spring Boot Docker映像

aws ecr在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 …

HH SaaS电商系统的商品营销角标功能模块设计

1、角标只属于商城&#xff0c;自营店铺共享商城的角标&#xff0c;第三方店铺可以申请角标 2、角标跟着素材模板走&#xff0c;关联素材模板id&#xff0c;一对多关系

python为什么这么小_同样是 Python,怎么区别这么大

发现问题上周&#xff0c;我的测试同事告诉我&#xff0c;你的用户名怎么还允许中文啊&#xff1f;当时我心里就想&#xff0c;你们测试肯定又搞错接口了&#xff0c;我用的是正则\w过滤了参数&#xff0c;怎么可能出错&#xff0c;除非Python正则系统出错了&#xff0c;那是不…

dynamodb容器使用_使用DynamoDBMapper扫描DynamoDB项目

dynamodb容器使用之前&#xff0c;我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库。 除了发出查询之外&#xff0c;DynamoDB还提供扫描功能。 扫描的目的是获取您在DynamoDB表上可能拥有的所有项目。 因此&#xff0c;扫描不需要任何基于我们的分区键或…

HH SaaS电商系统的商品营销标签功能模块设计

1、营销标签只属于商城&#xff0c;自营店铺共享商城的营销标签&#xff0c;第三方店铺可以申请营销标签 2、营销标签跟着商品走&#xff0c;关联spu_ext_id&#xff0c;多对多关系 3、一个商品最多添加5个营销标签

python加减法计算题 代码_关于《剑指offer》中不用加减乘除做加法的Python代码的问题...

题目如下&#xff1a;写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用、-、*、/四则运算符号。题目不难&#xff0c;可以采用位操作来实现&#xff0c;利用异或运算来计算不带进位的加法结果&#xff0c;利用与运算计算进位的标志&#xff0c;然后将这…

接口方法javadoc注释_继承Javadoc方法注释

接口方法javadoc注释尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则&#xff0c;但是当实际上不需要使用{inheritDoc}时&#xff0c;很容易不必要地显式描述注释继承&#xff0c;因为会使用相同的注释隐式继承。 Java 8 javado…

HH SaaS电商系统的商品销售管理标签功能模块设计

1、商城和店铺有各自的销售管理标签 2、商品管理标签跟着商品走&#xff0c;关联spu_ext_id或者sku_ext_id&#xff0c;多对多关系

redis java 监听_从零手写实现redis(四)添加监听器

前言java从零手写实现redis&#xff08;一&#xff09;如何实现固定大小的缓存&#xff1f;java从零手写实现redis&#xff08;三&#xff09;redis expire 过期原理java从零手写实现redis&#xff08;三&#xff09;内存数据如何重启不丢失&#xff1f;本节&#xff0c;让我们…

neo4j导入两个文件_Neo4j:找到两个纬度/经度之间的中点

neo4j导入两个文件在过去的两个周末中&#xff0c;我一直在处理一些运输数据&#xff0c;并且我想运行A *算法来查找两个车站之间的最快路线。 A *算法将EstimateEvaluator作为其参数之一&#xff0c;并且该评估器查看节点的经度/纬度&#xff0c;以确定一条路径是否值得遵循。…