ElasticsearchCRUD使用(七)【Elasticsearch中的实时重建索引】

ElasticSearch(四)spring-data-elasticsearch @Field注解无效,最完美解决方案 前言 我看了一大堆博客和资料大多是说这个spring的bug, 然后通过一个.json的配置文件去加载,我也是真的笑了, 本来注解就是方便开发,取消配置文件的功能, 结果解决方案却是本末倒置, 这里我奉献出最正确的解决方案 一. 准备实例代码 这是实体类代码,及其注解 package com.gupao.springbootdemo.bean; import lombok.Data; import org.springframework.data.annotation.Id; import org 阅读详情

该文章演示了如何使用ElasticsearchCRUD在Elasticsearch中进行现场重建索引。 reindex使用扫描并滚动获取数据,然后使用批量插入更新到新的索引。 reindex支持别名映射,使得可以进行实时索引。

设置文档搜索引擎和索引

AdventureWorks2012用于填充搜索引擎的数据。
从Entity Person添加person索引。
此代码创建一个新的索引persons_v1。 然后使用别名将其映射到persons。

public void CreatePersonAliasForPersonV1Mapping(string alias)
{
    using (var context = new ElasticsearchContext("http://localhost:9200/", _elasticsearchMappingResolver))
    {
        context.AliasCreateForIndex(alias, _elasticsearchMappingResolver.GetElasticSearchMapping(typeof(Person)).GetIndexForType(typeof(Person)));
    }
}

现在设置索引和别名。 Elasticsearch 已经准备好了一个实时重建索引。
这可以在这里查看: http://localhost:9200/_aliases 或者http://localhost:9200/_cat/aliases

{
    "persons_v1": {
    "aliases": {
    "persons": {}
    }
  }
}

步骤1:从索引persons_v1创建新索引persons_v2

从旧索引创建新的索引。 这可以直接执行。 当reindex正在执行时,可以添加新的文档或更新文档。 被删除的文件将不会被注意到。 因此,您应该使用一个布尔删除的字段。

reindex需要旧索引的索引和类型,还需要新的索引和新的索引类型。 如果您使用父/子文档索引,则必须对子文档重复此步骤。 ElasticsearchCRUD版本1.0.15之前,不支持父/子文档重建。

// - 这个时间戳通常是DateTime.UtcNow
// - 因此,可以找到在reindex期间更新的所有索引
DateTime beginDateTime = DateTime.UtcNow;

var reindex = new ElasticsearchCrudReindex<Person, PersonV2>(
    new IndexTypeDescription("persons_v1", "person"), 
    new IndexTypeDescription("persons_v2", "person"), 
    "http://localhost:9200");

reindex可以根据需要进行配置。 该方法使用扫描和滚动。 您可以更改默认设置,并在每个请求和响应中允许更多的文档。 您不应该让它太大,因为您不希望每个请求和响应发送500MB。

ScanAndScrollConfiguration定义每个滚动条保持打开的时间以及所有接下来的滚动条,并定义时间单位。 下面定义了5s。 如果有足够的时间,将从每个分片中获取1000个文档。
例如,如果您的索引中有5个分片,并且配置了足够的时间,并且有足够的文档,则下面的配置将在每个请求中获取5000个文档。

控制台日志用于显示进度

reindex.ScanAndScrollConfiguration = new ScanAndScrollConfiguration(new TimeUnitSecond(5), 1000);
reindex.TraceProvider = new ConsoleTraceProvider(TraceEventType.Information);

reindex方法本身需要2个函数以及Json _search查询的Json内容。 使用小于范围的查询来在定义的DateTime之前选择所有文档。 如果需要不同的查询逻辑,可以根据需要进行定义。 如果您不担心更新或其他任何内容,您可以使用所有匹配项。

reindex也需要转换方法。 这就是进行reindex的原因。 在此示例中,删除的bool字段将添加到文档。 第二个函数用于定义文档_id

reindex.Reindex(
    PersonReindexConfiguration.BuildSearchModifiedDateTimeLessThan(beginDateTime), 
    PersonReindexConfiguration.GetKeyMethod, 
    PersonReindexConfiguration.CreatePersonV2FromPerson);

Json内容生成方法BuildSearchModifiedDateTimeLessThan构建Json查询。 这是一个非常原始的实现,如果需要,您可以更加有说服力。

public static string BuildSearchModifiedDateTimeLessThan(DateTime dateTimeUtc)
{
    return BuildSearchRange("lt", "modifieddate", dateTimeUtc);
}

//{
//   "query" :  {
//     "range": {  "modifieddate": { "lt":   "2003-12-29T00:00:00"  } }
//  }
//}
private static string BuildSearchRange(string lessThanOrGreaterThan, string updatePropertyName, DateTime dateTimeUtc)
{
    string isoDateTime = dateTimeUtc.ToString("s");
    var buildJson = new StringBuilder();
    buildJson.AppendLine("{");
    buildJson.AppendLine("\"query\": {");
    buildJson.AppendLine("\"range\": {  \"" + updatePropertyName + "\": { \"" + lessThanOrGreaterThan + "\":   \"" + isoDateTime + "\"  } }");
    buildJson.AppendLine("}");
    buildJson.AppendLine("}");

    return buildJson.ToString();
}

将旧文档类型转换为新文档类型的转换方法。

public static PersonV2 CreatePersonV2FromPerson(Person item)
{
    return new PersonV2
    {
        BusinessEntityID = item.BusinessEntityID,
        PersonType = item.PersonType,
        NameStyle = item.NameStyle,
        Title = item.Title,
        FirstName = item.FirstName,
        MiddleName = item.MiddleName,
        LastName = item.LastName,
        Suffix = item.Suffix,
        EmailPromotion = item.EmailPromotion,
        AdditionalContactInfo = item.AdditionalContactInfo,
        Demographics = item.Demographics,
        rowguid = item.rowguid,
        ModifiedDate = item.ModifiedDate,
        Deleted = false
    };
}

Returns the _id property for the document _id
public static object GetKeyMethod(Person person)
{
    return person.BusinessEntityID;
}

步骤2:更换别名persons 到 索引person_v2

现在别名从旧的索引切换到新的索引

reindex.SwitchAliasfromOldToNewIndex("persons");

别名指向persons_v2索引http://localhost:9200/_aliases

{
    "persons_v1": {
    "aliases": {}
    },
    "persons_v2": {
    "aliases": {
    "persons": {}
    }
    }
}

步骤3:现在获得所有在REINDEXING和REINDEX上更新的文档

现在新的索引已经开始运行,所有在重新构建索引发生时更新的文档现在都被重新索引了。 它使用大于范围的查询搜索并返回大于开始DateTime的所有文档。

如果相同的文档在新索引中被更新,它将被覆盖。 再次,您可以决定这是否重要,并创建适当的查询搜索。

 // ---------------------------------------------------------
//步骤3:现在可以获得所有在重新输入时更新的文档
// ---------------------------------------------------------
//注意:如果文档在此期间再次被更新,那么这个方法将被忽略。
//如果需要,您必须检查新索引中项目的更新时间戳!
reindex.Reindex(
    PersonReindexConfiguration.BuildSearchModifiedDateTimeGreaterThan(beginDateTime), 
    PersonReindexConfiguration.GetKeyMethod, 
    PersonReindexConfiguration.CreatePersonV2FromPerson);

运行应用程序时,可以查看进度:
这里写图片描述

结论

Live reindex是Elasticsearch中的一个很棒的功能,在搜索引擎或NoSQL中,ElasticsearchCRUD 1.0.15中将支持父/子文档索引reindex。

西门子1200与FANUC机器人Profinet通讯 近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 PLC项目已经归档,只需要恢复就可以看到。对应Profinet通讯的GSD文件也都在博文最后有连接 机器人柜子:R-30IB Mate 机器人主体:M-10IA 12 一、硬件介绍 机器人Profinet I/O通讯板卡:... 阅读详情

相关推荐

大学生电赛学习之路

可以看到全国大学生电子设计大赛的认可度是非常高的,属于A类学科竞赛。电子设计大赛的形式也是给出题目,参赛者有四天三夜的时间解决问题,题目大致可以分为:控制类、测量类、高频类以及电力电子类。该竞赛会在单数年的9月份举行。但是对于新生来说电赛确实遥不可及的,可能在很多学校本科生是不能进入实验室的,但是就算进了实验室你就有资格去参加电赛或者说能拿一个不错的奖项吗? 现在正值新生开学季,当然会有一大批学生会进入实验室的学习,电赛的举办时间是每年的暑假,所以说对于大一同学来说有一年的时间去准备,那我们就来说一说参加.

weixin_46098612的博客 8788

spring-data-elasticsearch (elasticsearch 6.8.0) @Document 和 @Field 注解详解

首先在用法上的区别,@Document 一般用在类上,引起其他类。而@Field 注解一般用在参数上,比如定义一个es操作的VO: 1、创建 ArticleEsDto import java.io.Serializable; import java.util.Date; import lombok.Data; import lombok.ToString; import org.springframework.data.annotation.Id; import org.springframewor.

nandao158的博客 8760

一生一芯 预学习阶段 NEMU代码学习(2)

如果 nemu_state.state == NEMU_ABORT:说明程序处于 "中止" 状态,输出 "ABORT",并且使用 ANSI_FG_RED 红色格式化显示。如果 halt_ret == 0,表示程序正常终止(触发了 "GOOD TRAP"),输出 "HIT GOOD TRAP",并使用 ANSI_FG_GREEN 绿色显示。如果要执行的指令数量 n 小于预定义的常量 MAX_INST_TO_PRINT,则将 g_print_step 置为 true,表示会逐步打印指令执行的过程。

weixin_45041054的博客 826

ElasticSearch基础语法之进阶基础查询&field类型

目录 ES基础查询 1、充分理解倒排索引及token的概念 2、倒排索引的核心组成 3、存储并索引 4、利用analyze api搜索 建立索引 5、field类型 ES基础查询 1、充分理解倒排索引及token的概念 搜索引擎其实跟我们的使用图书很相似,下面我来对图书和搜索引擎进行一个简单的类比,来看一下搜素引擎中正排和倒排索引。 图书 正排索引-目录页 倒排索引-索引页 搜索引擎 正排索引-文档 Id 到文档内容和单词的关联 倒排索引-单词...

u011261004的博客 1339

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 249

Unity如何实现3D物体拆解组装

最近有一个需求,是做一个发动机的拆卸和安装功能,其实是一个很简单的功能,但是其中有一个点我觉的非常有意思,就是拖拽组装时,物体如何精准拖到目标位置,思路有了,但是我一直找不到实现方式,早晨刷牙时无意间想到了叉乘,我才有了解决方案。就凭这一次的灵光乍现,也很有必要写篇博客来记录一下。首先,我们先来看下我们要实现的效果,就是对一个发动机(任意多组件物体,如:车)的360°预览查看,手动拖拽拆解,手动拖拽组装。360°旋转视角远近拉伸视角点击拖拽拆卸拖拽组装。

TxNet 1万+

springboot集成elasticsearch详细使用过程

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。   java代码操作elasticSearch使用过程:    第一步...

itboy 1801

基于 ESP32 的智慧图书馆图书定位与借阅管理系统

本文设计的基于 ESP32 的智慧图书馆图书定位与借阅管理系统,以低成本、模块化、易部署为核心优势,融合 UWB 精准定位、RFID 自动识别、WiFi 无线通信技术,解决了传统图书馆的痛点问题。

weixin_42300449的博客 99

探索Elasticsearch的无限可能 —— 强大的ElasticsearchCRUD工具箱

探索Elasticsearch的无限可能 —— 强大的ElasticsearchCRUD工具箱 项目介绍 在大数据时代,高效、灵活的搜索引擎变得至关重要。ElasticsearchCRUD是一个专为.Net开发者设计的强大库,它极大地简化了与Elasticsearch这一分布式搜索和分析引擎交互的复杂度。通过一组全面且易于使用的API,该项目提供了一站式的解决方案,涵盖了从基本的数据创建、读取、...

gitblog_00046的博客 467

C#串口通信从入门到精通(7)——整数/浮点数与二进制、八进制、十六进制之间的转换与C#实现

本文详细介绍由博主开发的DataConvert串口通信帮助类的用法,该帮助类涵盖了串口通信领域所有的数据转换方法,帮助大家快速编写串口通信程序!

qq_34059233的博客 2877

【某音电商】protobuf聊天协议逆向

某音电商私信、聊天消息protobuf协议逆向分析与解析

吴秋霖的博客 2314

ElasticsearchCRUD使用(十六)【Elasticsearch聚合】

本文介绍如何使用ElasticsearchCRUD实现Elasticsearch聚合搜索请求和响应。Elasticsearch聚合Elasticsearch聚合API允许您在近实时或即时的时候对数据进行总结,计算,分组。这些聚合可以实现子聚合,可以根据需要再次实现更多的子聚合。这允许非常灵活的API。 ElasticsearchCRUD支持以下聚合:最小聚合,最大聚合,总和,平均聚合,统计量,扩展统

极客神殿 1616

nicegui 可视化扩展库

总体来说,这段代码使用nicegui库创建了一个具有一些基本UI元素的界面,并使用扩展库来实现更多的布局功能。这段代码使用了nicegui库创建了一个UI界面。函数导入了一个扩展库,用于实现更多的布局功能。然后又使用了一个行布局,并添加了两个按钮(在UI界面中,使用了一个卡片(在行布局中依次添加了一个标签(在卡片中使用了一个头像(接下来使用了一个行布局(设置了背景颜色为绿色。设置了居中对齐和红色。设置了间距和字体大小。设置了居中对齐和样式。设置了按钮的对齐方式。

东方佑 1019

elasticsearchCRUD

Elasticsearch是一个开源的分布式搜索和分析引擎,用于全文搜索、结构化搜索、分析以及将这些数据可视化。它是构建在Apache Lucene搜索引擎库之上的,并提供了一个简单、可扩展的RESTful API。 主要是 es的索引库以及文档的CRUD

Mr_FunnyNiu的博客 953

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ElasticsearchCRUD翻译系列之(一): ElasticsearchCRUD 介绍

ELASTICSEARCH CRUD .NETPROVIDER 翻译自(原文地址: https://damienbod.com/2014/09/22/elasticsearch-crud-net-provider/) 本文介绍了ElasticsearchCRUD NuGet包的使用。ElasticsearchCRUD便于你通过对实体的插入、删除、修改从Elasticsearch中查找单个记录...

weixin_30284355的博客 66

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ElasticsearchCRUD使用(十九)【索引热身】

本文介绍如何使用索引预热与ElasticsearchCRUD。 预热对于最常用的查询很有用,可以帮助您提高性能。 在创建索引时,可以添加一个预热器,在索引之后添加或从索引中删除。 还可以在全局或每种索引类型中添加预热器。创建索引时添加预热器在创建索引时,可以加一个预热器。 IndexCreate方法为此提供了一个Warmers属性函数。 Warmers列表可以接受查询或聚合。_context.Ind

极客神殿 2113

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ElasticSearch索引库操作②(索引库CRUD,文档CRUD)

索引库操作有哪些?创建索引库:PUT /索引库名查询索引库:GET /索引库名删除索引库:DELETE /索引库名修改索引库,添加字段:PUT /索引库名/_mapping可以看到,对索引库的操作基本遵循的Restful的风格,因此API接口非常统一,方便记忆。文档操作有哪些?

weixin_57558097的博客 1238

ElasticsearchCRUD使用(五)【Elasticsearch中的子文档,父文档】

设置文档搜索引擎AdventureWorks2012用于填充搜索引擎的数据。 可以在这里下载。以下是使用的传输方法(Entity子对象作为子文档保存在stateprovinces索引中):public void SaveToElasticsearchStateProvince() { IElasticsearchMappingResolver elasticsearchMappingReso

极客神殿 2535

ElasticsearchCRUD使用(九)【Elasticsearch父子,孙子节点文件和路由】

本文介绍如何使用ElasticsearchCRUD在Elasticsearch中创建父,子和孙子文档。 如果创建相互关联的文档,那么文件全部保存到Elasticsearch中的同一个分片很重要。 搜索性能更好,如果可以为搜索定义特定的分片。当创建父文档和子文档关系时,父定义对于子文档是足够的。 这样可确保将子文档保存到同一分片中。 一旦使用了孙子文档,就需要一个路由定义,否则孙子文档不会总是被保存到

极客神殿 2729

ElasticsearchCRUD使用(十八)【进行MVC搜索Elasticsearch高亮】

本文介绍如何在MVC应用程序中使用Elasticsearch高亮显示搜索结果。该应用程序执行一个简单的Elasticsearch模糊查询,高亮显示的结果显示在Razor 视图中。在使用高亮显示请求的搜索可以发送到Elasticsearch之前,需要创建一个索引。 FastestAnimal类用于此。public class FastestAnimal { public long Id { g

极客神殿 1595

ElasticsearchCRUD使用(八)【使用Elasticsearch和WebAPI导出CSV】

本文演示如何使用Web API将数据从Elasticsearch导出到CSV文件。 使用_search扫描和滚动从Elasticsearch检索数据。 该API可以非常快速地检索数据,无需任何排序。 然后使用来自Jordan Gray的WebApiContrib.Formatting.Xlsx将数据导出到CSV文件。 导出的进度显示在使用SignalR(MVC razor视图)的HTML页面中。建立

极客神殿 3385

ElasticsearchCRUD使用(十二)【Elasticsearch的German分析器】

本文介绍如何使用Elasticsearch的默认。 创建使用ElasticsearchCRUD的索引,它使用德语分析器对搜索和索引进行映射。可以通过在ElasticsearchString属性中定义Analyzer属性来使用德语分析器。 此属性为搜索和索引添加分析器。 该属性可以使用任何字符串,因此也可以定义自定义分析器。 Fields属性也被设置。 这被使用,以便原始字符串也可以用于搜索

极客神殿 796

ElasticsearchCRUD使用(十七)【Elasticsearch搜索多个指标和类型】

本文介绍如何使用ElasticsearchCRUD在多个索引和类型的Elasticsearch中进行搜索。 Elasticsearch提供了一个指数过滤器,一个类型过滤器和一个指数查询,可以在使用多个索引和类型时使用。 汇总搜索和计数请求也可以使用多个指数和类型执行。该示例在单个索引中使用父,子,子孙映射,使用路由的父_Id。 这确保了孙子文档和父文档被保存到同一个分片。 创建映射后,将在批量请求中

极客神殿 929

ElasticsearchCRUD使用(十一)【Elasticsearch同义词分析器】

本文介绍如何使用ElasticsearchCRUD在Elasticsearch中设置和使用自定义分析器。 创建具有自定义同义词词元过滤器的分析器并将其添加到索引中。 如果您搜索任何同义词,您将找到所有可能的文本的所有匹配。创建自定义同义词分析器在ElasticsearchCRUD中使用自定义分析器,过滤器或分词器创建索引非常简单。 强类型的类配置可用于所有类型以及所有默认可能性的常量定义。 在下面的

极客神殿 979

ElasticsearchCRUD使用(十三)【Elasticsearch谷歌地图搜索的MVC应用】

本文介绍如何创建一个使用谷歌地图和Elasticsearch的MVC应用程序进行geo_distance搜索,并找到最近的点(文档)到您的位置。 Elasticsearch索引使用geo_point来定义每个文档的位置。Elasticsearch支持GeoJson格式。Elasticsearch索引和类型使用以下模型创建:public class MapDetail { public lo

极客神殿 2041
上一篇: ElasticsearchCRUD使用(六)【EF和Elasticsearch的MVC应用程序】
下一篇: ElasticsearchCRUD使用(八)【使用Elasticsearch和WebAPI导出CSV】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值