Elasticsearch对象映射
Spring Data Elasticsearch对象映射是将Java对象(域实体)映射到存储在Elasticsearchs中的JSON表示形式并返回的过程。内部用于此映射的类是MappingElasticsearchConverter。
元模型对象映射
基于元模型的方法使用域类型信息对Elasticsearch进行读写操作。这允许注册特定域类型映射的Converter实例。
1、映射注释概述
MappingElasticsearchConverter使用元数据来驱动对象到文档的映射。元数据取自可以注释的实体属性。
以下注释可用:
-
@Document
: 在类级别应用,表示该类是映射到数据库的候选对象。最重要的属性是(查看API文档以获取完整的属性列表):-
indexName
: 用于存储此实体的索引的名称。这可以包含SpEL模板表达式,如"log-#{T(java.time.LocalDate).now().toString()}"
-
createIndex
: 标记是否在存储库引导时创建索引。默认值为true。请参阅使用相应映射自动创建索引
-
-
@Id
:在字段级别应用,以标记用于标识目的的字段。 -
@Transient
,@ReadOnlyProperty
,@WriteOnlyProperty
:有关详细信息,请参阅以下“控制向Elasticsearch写入和从Elasticsearchs读取哪些属性”一节。 -
@PersistenceConstructor
: 标记给定的构造函数(甚至是受包保护的构造函数),以便在从数据库实例化对象时使用。构造函数参数按名称映射到检索到的文档中的键值。 -
@Field:
在字段级别应用并定义字段的属性,大多数属性映射到相应的Elasticsearch Mapping定义(以下列表不完整,请查看注释Javadoc以获取完整参考):-
name
: Elasticsearch文档中表示的字段名称,如果未设置,则使用Java字段名称。 -
type
: The field type, can be one of Text, Keyword, Long, Integer, Short, Byte, Double, Float, Half_Float, Scaled_Float, Date, Date_Nanos, Boolean, Binary, Integer_Range, Float_Range, Long_Range, Double_Range, Date_Range, Ip_Range, Object, Nested, Ip, TokenCount, Percolator, Flattened, Search_As_You_Type. 请参阅Elasticsearch映射类型。如果未指定字段类型,则默认为FieldType.auto。这意味着,没有为该属性编写映射条目,并且当存储了该属性的第一个数据时,Elasticsearch将动态添加一个映射条目(有关动态映射规则,请查看Elasticsearch文档)。 -
format
: 一个或多个内置日期格式,请参阅下一节“日期格式映射”。 -
pattern
: 一个或多个自定义日期格式,请参阅下一节“日期格式映射”。 -
store
: 标记原始字段值是否应存储在Elasticsearch中,默认值为false。 -
analyzer
,searchAnalyzer
,normalizer
用于指定自定义分析器和归一化器。
-
-
@GeoPoint
:将字段标记为geo_point数据类型。如果该字段是GeoPoint类的实例,则可以省略。 -
@ValueConverter
:定义一个用于转换给定属性的类。与注册的Spring Converter不同,它只转换带注释的属性,而不是给定类型的每个属性。
映射元数据基础设施是在一个独立的spring data commons项目中定义的,该项目与技术无关。
控制向Elasticsearch写入和从中读取哪些属性
本节详细介绍了定义属性值是写入Elasticsearch还是从Elasticsearchs读取的注释。
@Transient:用此注释注释的属性不会写入映射,它的值不会发送到Elasticsearch,当Elasticsearchs返回文档时,此属性不会在结果实体中设置。
@ReadOnlyProperty:带有此注释的属性不会将其值写入Elasticsearch,但在返回数据时,该属性将填充Elasticsearchs在文档中返回的值。一个用例是在索引映射中定义的运行时字段。
@WriteOnlyProperty:带有此注释的属性将其值存储在Elasticsearch中,但在读取文档时不会设置任何值。例如,这可以用于合成字段,这些字段应该进入Elasticsearch索引,但不会在其他地方使用。
日期格式映射
从TemporalAccessor派生或java.util.类型的属性。日期必须具有FieldType类型的@Field注释。必须为此类型注册日期或自定义转换器。本段介绍FieldType的使用。日期。
@Field注释有两个属性,用于定义将哪种日期格式信息写入映射(另请参阅Elasticsearch内置格式和Elasticsearch-自定义日期格式)
format属性用于定义至少一种预定义格式。如果未定义,则使用默认值_date_optional_time和epoch_millis。
pattern属性可用于添加其他自定义格式字符串。如果只想使用自定义日期格式,则必须将format属性设置为空{}。
下表显示了不同的属性及其值创建的映射:
annotation | format string in Elasticsearch mapping |
---|---|
@Field(type=FieldType.Date) | "date_optional_time||epoch_millis", |
@Field(type=FieldType.Date, format=DateFormat.basic_date) | "basic_date" |
@Field(type=FieldType.Date, format={DateFormat.basic_date, DateFormat.basic_time}) | "basic_date||basic_time" |
@Field(type=FieldType.Date, pattern="dd.MM.uuuu") | "date_optional_time||epoch_millis||dd.MM.uuuu", |
@Field(type=FieldType.Date, format={}, pattern="dd.MM.uuuu") | "dd.MM.uuuu" |
检查org.springframework.data.elasticsearch.annotation的代码。DateFormat枚举,用于预定义值及其模式的完整列表。
范围类型
当一个字段被标注为Integer_Range、Float_Range和Long_Range中的一种类型时,该字段必须是映射到Elasticsearch范围的类的实例,例如:
class SomePersonData {@Field(type = FieldType.Integer_Range)private ValidAge validAge;// getter and setter
}class ValidAge {@Field(name="gte")private Integer from;@Field(name="lte")private Integer to;// getter and setter
}
作为Spring Data的替代方案,Elasticsearch提供了一个Range<T>类,因此前面的示例可以写成:
class SomePersonData {@Field(type = FieldType.Integer_Range)private Range<Integer> validAge;// getter and setter
}
<T>类型支持的类是Integer、Long、Float、Double、Date和实现TemporalAccessor接口的类。
映射字段名称
在没有进一步配置的情况下,Spring Data Elasticsearch将使用对象的属性名作为Elasticsearch中的字段名。可以通过在该属性上使用@field注释来更改单个字段的设置。
也可以在客户端(Elasticsearch客户端)的配置中定义FieldNamingStrategy。例如,如果配置了SnakeCaseFieldNamingStrategy,则对象的属性sampleProperty将映射到Elasticsearch中的sample_property。FieldNaming战略适用于所有实体;可以通过在属性上使用@Field设置特定名称来覆盖它。
Non-field-backed属性
通常,实体中使用的属性是实体类的字段。在某些情况下,属性值是在实体中计算的,应该存储在Elasticsearch中。在这种情况下,getter方法(getProperty())可以用@Field注释进行注释,此外,该方法必须用@AccessType(AccessType.Type.PROPERTY)进行注释。在这种情况下需要的第三个注释是@WriteOnlyProperty,因为这样的值只会写入Elasticsearch。完整示例:
@Field(type = Keyword)
@WriteOnlyProperty
@AccessType(AccessType.Type.PROPERTY)
public String getProperty() {return "some value that is calculated here";
}
其他特性注释
@IndexedIndexName
可以在实体的String属性上设置此注释。该属性不会写入映射,它不会存储在Elasticsearch中,并且不会从Elasticsearch文档中读取其值。在持久化实体后,例如通过调用ElasticsearchOperations.save(T实体),从该调用返回的实体将包含实体保存到该属性中的索引的名称。当bean动态设置索引名时,或者在写入写入别名时,这很有用。
将一些值放入这样的属性中不会设置实体存储到的索引!
2、映射规则
类型注解
映射使用嵌入在发送到服务器的文档中的类型提示来允许泛型类型映射。这些类型提示在文档中表示为_class属性,并为每个聚合根编写。
public class Person { @Id String id;String firstname;String lastname;
}
{"_class" : "com.example.Person", "id" : "cb7bef","firstname" : "Sarah","lastname" : "Connor"
}
可以将类型提示配置为保存自定义信息。使用@TypeAlias注释来执行此操作。
@TypeAlias("human")
public class Person {@Id String id;// ...
}
{"_class" : "human", "id" : ...
}
禁用类型提示
如果应该使用的索引已经存在,但没有在其映射中定义类型提示,并且映射模式设置为strict,则可能需要禁用类型提示的写入。在这种情况下,写入类型提示将产生错误,因为无法自动添加字段。
通过重写从AbstractElasticsearchConfiguration派生的配置类中的方法writeTypeHints(),可以为整个应用程序禁用类型提示(请参阅Elasticsearch客户端)。
或者,可以使用@Document批注为单个索引禁用它们:
@Document(indexName = "index", writeTypeHint = WriteTypeHint.FALSE)
地理空间类型
Point和GeoPoint等地理空间类型转换为lat/lon对。
public class Address {String city, street;Point location;
}
{"city" : "Los Angeles","street" : "2800 East Observatory Road","location" : { "lat" : 34.118347, "lon" : -118.3026284 }
}
GeoJson类型
Spring Data Elasticsearch通过为不同的几何体提供接口GeoJson和实现来支持GeoJson类型。根据GeoJson规范,它们被映射到Elasticsearch文档。当写入索引映射时,实体的相应属性在索引映射中指定为geo_shape。(同时检查Elasticsearch文档)
public class Address {String city, street;GeoJsonPoint location;
}
{"city": "Los Angeles","street": "2800 East Observatory Road","location": {"type": "Point","coordinates": [-118.3026284, 34.118347]}
}
实现了以下GeoJson类型:
-
GeoJsonPoint
-
GeoJsonMultiPoint
-
GeoJsonLineString
-
GeoJsonMultiLineString
-
GeoJsonPolygon
-
GeoJsonMultiPolygon
-
GeoJsonGeometryCollection
Collections
对于集合内的值,当涉及类型提示和自定义转换时,应用与聚合根相同的映射规则。
public class Person {// ...List<Person> friends;}
{// ..."friends" : [ { "firstname" : "Kyle", "lastname" : "Reese" } ]
}
Maps
对于Maps内的值,当涉及类型提示和自定义转换时,应用与聚合根相同的映射规则。然而,Map键需要String才能由Elasticsearch处理。
public class Person {// ...Map<String, Address> knownLocations;}
{// ..."knownLocations" : {"arrivedAt" : {"city" : "Los Angeles","street" : "2800 East Observatory Road","location" : { "lat" : 34.118347, "lon" : -118.3026284 }}}
}
3、自定义转换
查看上一节中的配置ElasticsearchCustomConversions允许注册映射域和简单类型的特定规则。
@Configuration
public class Config extends ElasticsearchConfiguration {@Overridepublic ClientConfiguration clientConfiguration() {return ClientConfiguration.builder() //.connectedTo("localhost:9200") //.build();}@Bean@Overridepublic ElasticsearchCustomConversions elasticsearchCustomConversions() {return new ElasticsearchCustomConversions(Arrays.asList(new AddressToMap(), new MapToAddress())); }@WritingConverter static class AddressToMap implements Converter<Address, Map<String, Object>> {@Overridepublic Map<String, Object> convert(Address source) {LinkedHashMap<String, Object> target = new LinkedHashMap<>();target.put("ciudad", source.getCity());// ...return target;}}@ReadingConverter static class MapToAddress implements Converter<Map<String, Object>, Address> {@Overridepublic Address convert(Map<String, Object> source) {// ...return address;}}
}
{"ciudad" : "Los Angeles","calle" : "2800 East Observatory Road","localidad" : { "lat" : 34.118347, "lon" : -118.3026284 }
}
相关文章:
Elasticsearch对象映射
Spring Data Elasticsearch对象映射是将Java对象(域实体)映射到存储在Elasticsearchs中的JSON表示形式并返回的过程。内部用于此映射的类是MappingElasticsearchConverter。 元模型对象映射 基于元模型的方法使用域类型信息对Elasticsearch进行读写操作…...
Oracle 19c rac 补丁升级,从19.7 to19.22-集群
1. 补丁包概述 数据库环境 角色 数据库 IP地址 数据库版本 主机名 数据库名称 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 将以下补丁包上传到/soft下 上传到两个节点的soft目录下:p6880880_190000_Linux-x86-64.zip (更新o…...
机器学习--Kaggle的使用
机器学习–Kaggle的使用 打开Kaggle: Your Machine Learning and Data Science Community并点击Sign In登录账号 kaggle中自带了很多的数据集 在点击Datasets之后,单点Notebook,如果有适用的数据集可以单击Copy and Edit复制其Notebook,之后…...
客户服务新突破,天润融通助力电动车企业实现数智化转型
近年来,两轮电动车成为年轻人喜爱的出行新方式,借着这种潮流,许多新兴品牌迅速发展,并跻身行业头部。 但问题也随之而来,由于业务快速发展,各类服务问题也开始增多。 比如天润融通服务的一家头部两轮电动…...
力扣题目 - 2931.购买物品的最大开销
题目 还需要你前往力扣官网查看详细的题目要求 地址 思路 这边需要你去力扣官网详细查看题目看了题目提供的示例 已经有了解法, 先把values转成1维数组,排序之后进行累加即可 代码 var maxSpending function (values) {let list values.flat();list.sort((a, b) > a - …...
智慧化工园区自动化在线监测,建立产业链路数字安全网
智慧化工升级国家政策推动安全风险频发 化工园区作为化工产业的核心集聚地,在全球经济中占据重要地位。为推动行业的高质量发展,国家相继发布了《“十四五”危险化学品安全生产规划方案》、《石化化工行业数字化转型实施指南》和《化工园区安全风险智能化…...
在Docker中运行MySQL的思考:挑战与解决方案
引言 在云计算和容器化技术日益普及的今天,Docker作为一种轻量级的容器化平台,已经成为开发和部署应用的首选工具之一。其提供的便携性、可扩展性和环境一致性对于无状态微服务来说无疑是巨大的福音。然而,并非所有应用都适合在Docker容器中…...
Linux中所有和$有关的操作
prog < file 命令在 Shell 编程中用于 输入重定向,它将文件的内容作为程序的输入。即,程序 prog 会从文件 file 中读取数据,而不是从标准输入(通常是键盘)读取数据。 基本语法: prog < file 解释&…...
github操作学习笔记(杂乱版)
git开源的分布式版本控制系统: 每次修改文件提交后,都会自动创建一个项目版本 查看git版本看有没有安装成功:git --version 把默认编辑器设置成vim:git config --global core.editor "vim" 1、设置昵称和邮箱ÿ…...
学习思考:一日三问(思考篇)之路由表
学习思考:一日三问(思考篇)之路由表 学了什么(是什么)Destination/Mask(最终目标,寻路必须)Proto(择优可选)Pre(择优可选)Cost&#x…...
多个NVR同时管理EasyNVR:设置了“按需拉流超时”配置但没反应的解决方法
视频监控这一技术在当今社会的应用已然愈发广泛,其影响力渗透至我们生活的方方面面。它不仅为我们带来了更为坚固的安全防线,还在诸多行业领域中发挥着不可替代的作用。 在广泛的应用领域中,NVR录像机汇聚管理EasyNVR凭借其卓越的技术实力与前…...
基于Springboot的实验室管理系统【附源码】
基于Springboot的实验室管理系统 效果如下: 系统登录页面 实验室信息页面 维修记录页面 轮播图管理页面 公告信息管理页面 知识库页面 实验课程页面 实验室预约页面 研究背景 在科研、教育等领域,实验室是进行实验教学和科学研究的重要场所。随着实验…...
【Oracle11g SQL详解】常用字符串函数:`CONCAT`、`SUBSTR`、`LENGTH`、`INSTR` 等
常用字符串函数:CONCAT、SUBSTR、LENGTH、INSTR 等 字符串函数在 SQL 中被广泛用于处理文本数据,例如拼接字符串、提取子串、查找字符位置等。Oracle 11g 提供了强大的字符串函数,可以简化对字符串的操作。 一、CONCAT:拼接字符串…...
某养老产业公司管理诊断项目成功案例纪实
某养老产业公司管理诊断项目成功案例纪实 ——从短期和长期出发,提供转型改革建议 【客户行业】养老行业 【问题类型】问题诊断 【客户背景】 某养老产业公司是一家主要从事养老服务为主的企业,主营业务包括社区养老服务、居家养老、康复训练服务等…...
自然语言处理基础及应用场景
自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注:区分每个词名词、动词、形容词等词性命名实体的识别:名词的具体指代是哪一类事物共指消解:代词指代的是前面…...
网页爬虫技术全解析:从基础到实战
引言 在当今信息爆炸的时代,互联网上的数据量每天都在以惊人的速度增长。网页爬虫(Web Scraping),作为数据采集的重要手段之一,已经成为数据科学家、研究人员和开发者不可或缺的工具。本文将全面解析网页爬虫技术&…...
数据仓库-查看表和数据库的信息
查询表信息 使用系统表pg_tables查询数据库所有表的信息。 SELECT * FROM pg_tables;使用gsql的\d命令查询表结构。 示例:先创建表customer_t1并插入数据。 CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5)…...
【JVM】JVM基础教程(四)
上一章:【JVM】JVM基础教程(三)-CSDN博客 目录 自动垃圾回收 方法区的回收 方法区回收条件 手动触发回收 堆回收 如何判断堆上的对象可以回收? 可以给对象引用赋值null,切断引用 引用计数法 循环引用缺点 查…...
深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)
深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna) 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代,将自然语言查询转化为结构化查询语言(SQL)的能力变得日益重要。无论是小型创业…...
websocket 服务 pinia 全局配置
websocket 方法类 // stores/webSocketStore.ts import { defineStore } from "pinia";interface WebSocketStoreState {ws: WebSocket | null; // WebSocket 实例callbacks: ((message: string) > void)[]; // 消息回调函数列表connected: boolean; // 连接状态…...
基于Springboot企业oa管理系统【附源码】
基于Springboot企业oa管理系统 效果如下: 系统主页面 用户管理页面 公告信息管理页面 客户关系管理页面 车辆信息管理页面 工资信息管理页面 文件信息管理页面 上班考勤管理页面 研究背景 随着信息化时代的到来和企业OA管理理念的更新,企业面临着日益…...
Python遥感开发之地理探测器的实现
Python遥感开发之地理探测器的实现 1 地理探测器介绍2 官方软件实现3 Python代码实现 前言:本篇博客主要介绍使用py_geodetector库来实现地理探测器。 1 地理探测器介绍 官网链接:http://www.geodetector.cn/index.html 地理探测器用于测量和归因空间分…...
【HarmonyOS】 鸿蒙保存图片或视频到相册
【HarmonyOS】 鸿蒙保存图片或视频到相册 前言 鸿蒙中保存图片或者视频,或者其他媒体文件到设备的媒体库,可以是相册,也可以是文件管理等。共有两种方式: 需要应用申请受限权限,获取文件读写的权限(调用…...
Apache Echarts和POI
目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观…...
厦门凯酷全科技有限公司正规吗靠谱吗?
随着短视频和直播电商的迅猛发展,越来越多的企业开始将目光投向抖音这一平台。作为国内领先的短视频社交平台,抖音凭借其庞大的用户基础和强大的算法推荐系统,成为众多品牌拓展市场、提升销售的重要渠道。厦门凯酷全科技有限公司(…...
WireShark 下载、安装和使用
1、下载 官网下载太慢,本人另外提供下载地址【下载WireShark】 2、安装 全部默认下一步即可,但如下图所示的这一步值得拿出来说一下。这一步是要你安装Npcap,但是你的电脑如果已经安装了WinPcap,那么可以选择不再安装Npcap。Npca…...
2025周易算命网站搭建详细方法+源码选择php环境的配置
以下是一个详细的搭建教程,包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux(推荐使用Ubuntu或CentOS)Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x(确保小于8.0) 1.2 安…...
共享购模式革新登场:重构消费生态,领航商业新未来
近期,一种创新的商业模式——共享购,在电子商务领域掀起了一股热潮,不仅吸引了广大消费者的目光,也激发了商家和资本市场的浓厚兴趣。共享购模式凭借其独到的消费积分累积与转换体系,正在逐步重塑消费生态,…...
centos kafka单机离线安装kafka服务化kafka tool连接kafka
a.版本&环境 linux版本:centos7.6 kafka: kafka_2.12 zookeeper:zookeeper_3.6.3(之前已经安装:linux zookeeper安装并服务化-CSDN博客) java:1.8(之前已经安装) windows kafka tool: 2.1 b.kafka单机安装 1.切换目录 cd downloads/,利用rz命令࿰…...
QT JSON文件解析
参考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打开文件,读取全部内容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 读…...
苏州做网站推广的/网上销售
最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...
天长市城乡规划建设局网站/西安企业seo外包服务公司
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!一个标准的web应用程序,打包成wa…...
app网站建设 - 百度/站内搜索工具
首先找根网线把路由器连接到ADSL猫的WAN口上,然后再用根网线把路由器连接到电脑上 ,确保连接成功后,打开你电脑的IE浏览器,然后输入你路由器面的ip地址,一般情况都是192.168.1.1,然后回车会弹出输入用户名和…...
个人可以备案几个网站/seo刷排名公司
摘要 Eclipse平台的设计目的是建立一个集成开发环境(IDE)以及其它任意的工具。本文是对Eclipse平台的一般性技术的介绍。第1部分展示了它的技术架构,第2部分展示了Eclipse平台如何被用于构建Java开发环境。 2001年7月17日 修订历史 1.02001年7月17日Jim des Ri…...
做策划的人经常浏览的网站/seo关键词首页排名代发
小白机器学习基础算法学习必经之路作者简介:武博士,人工智能方向博士,中国移动集团IT架构师。 科研方向:自然语言处理、计算机视觉、强化学习。 已经发表SCI文章3篇。 CSDN专栏文章60篇。(机器学习专栏、深度学习专栏、…...
网站设计建设介绍/网站运营课程
HTTP Basic Authentication 这种授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法。 效果: 客户端未未认证的时候,会弹出用户名密码输入框…...