记录es几个问题,增删改查,索引创建

2023-10-30

一,【es版本】

依赖:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

<elasticsearch.version>7.1.0</elasticsearch.version>

es依赖,版本号
存在版本匹配问题
为什么high level版本是 7.6.2
bulkIndex 底层分批

二,【should must filter matchQuery termQuery 区别联系】
BoolQueryBuilder queryBuilder = buildQueryBuilder()
should must filter 属于BoolQueryBuilder方法,相当于父层级,方法入参:QueryBuilder 。相当于:and or
matchQuery termQuery 属于 QueryBuilders 方法,相当于子层级,作为上面入参:构建条件为上面参数 QueryBuilder 子类,多态实现。相当于:= like,也比较符合sql写法:先and或者or,再写具体条件 是精确匹配还是模糊匹配。
代码示例:
BoolQueryBuilder queryBuilder = buildQueryBuilder();
    queryBuilder.should(QueryBuilders.matchQuery("name", queryWord))
            .should(QueryBuilders.termQuery("name" + ".keyword", queryWord))
            .should(QueryBuilders.wildcardQuery("spy", "" + queryWord + "*"))
            .should(QueryBuilders.wildcardQuery("fpy", "" + queryWord + "*")).minimumShouldMatch(1);
参考文档:            
https://blog.csdn.net/lom9357bye/article/details/52852533
    
三,【matchQuery 完全可以满足要求,.keyword什么用】
代码如下
queryBuilder.should(QueryBuilders.matchQuery("name", queryWord))
            .should(QueryBuilders.termQuery("name" + ".keyWord", queryWord))
什么场景用 .keyword,名字查询。
比如现在es中存在数据名字有 杜兰特,莫兰特 兰特 布莱恩特 米兰。现在查询条件“兰特”,
如果只用matchQuery,完全可以查询到所有数据,因为条件 兰特 本身会分词,名字中包含 '兰' 或者 '特'。
查询结果如下:杜兰特 兰特 莫兰特 布莱恩特 米兰,但是有一个问题,名字为:'兰特',为什么不是在第一个被检索到。
这时候 .keyword上场了,可以解决这个问题。
参考这个:
https://blog.csdn.net/tyw15/article/details/111930660
            
四,【es 增删改查实现方式】
1.RestHighLevelClient 
2.ElasticsearchRepository--PagingAndSortingRepository(page)--CrudRepository--Repository。底层到spring repository
 ElasticsearchRepository --Page<T> search(QueryBuilder var1, Pageable var2);-----分页用这个可以,可以添加查询条件
2.AbstractElasticsearchRepository--ElasticsearchRepository
3.ElasticsearchRestTemplate --AbstractElasticsearchTemplate--ElasticsearchOperations-- extends DocumentOperations(bulkIndex), SearchOperations
ElasticsearchRepository 实现原理完全有方法名决定,不需要实现

【ElasticsearchRepository实现原理】
https://blog.csdn.net/u013089490/article/details/84323903

【FuzzyQueryBuilder模糊、WildcardQueryBuilder模糊 区别】


五,【索引自动生成,什么时候,在哪里】
首先需要定义实体类加注解,代码中@Document(indexName = "manager", shards = 1, replicas = 0, refreshInterval = "10s", createIndex = true)
1.项目启动时创建_源码——AbstractElasticsearchRepository 判断条件是 1.根据注解属性 createIndex 是否等于true 2.索引是否存在
2.写入es数据时创建

但是经过测试
1.项目启动,自动创建设置为true,并没有创建索引,索引之前也不存在。那原因可能是索引从缓存中获取,缓存中还存在索引
2.写入数据时,确实自动创建了索引,无论createIndex = true or false。
由此推断,两种创建索引原理不同。
方式2创建索引,原理,待补充。

六,【自动创建索引,字段分析】

实体中定义vs mapping
日期类型:自动创建类型是 long 
Doulbe:float类型
integer: long
String:默认会生成两种类型 text keyword,无论实体中指定类型是keyword text,并没有效果

七,【手动创建与自动创建 选哪一个】
问题重现:手动创建一个索引,字段是下划线间隔。但是后面发现索引mapping多了几个字段,驼峰形式。
原因:写入es数据时,实体中存在mapping中之前没有的字段,会重现生成(驼峰vs下划线),索引没有重建,只是变更了mapping

解决方案:
1.禁止自动创建,手动创建
2.实体字段与索引字段定义为一样,不新增。不带下划线
3.实体转下划线,用JSONField(a_b),生成mapping字段还是驼峰,非下划线
暂定方式二。
测试手动创建,援引自动创建代码_AbstractElasticsearchRepository,但是结果是严格按照定义的字段创建,且不加filed字段,不产生字段。自动创建格式见上

八,【数据重复写入覆盖,非增量】
把唯一业务字段写入es主键
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录es几个问题,增删改查,索引创建 的相关文章

随机推荐

  • php密码正则验证

    验证密码必须是6 12位的数字和字母 0 9 a z A
  • WebSocket协议

    文章目录 备注 一 什么是WebSocket 二 为什么要有WebSocket 三 WebSocket特点 3 1 全双工 3 2 数据传输使用二进制帧 3 3 服务地址沿用HTTP格式 3 4 默认端口为80和443 四 WebSocke
  • C# Speech 语音文件生成

    1 依赖搭建 添加引用包 System Speech 工程引用 using System Speech Recognition 2 发声 private void button1 Click object sender EventArgs
  • failed to find plugin “flannel” in path [/opt/cni/bin],k8sNotReady解决方案

    问题 由于k8s安装master一直处于NotReady状态查看日志出现 failed to find plugin flannel in path opt cni bin 日志信息 Nov 04 00 35 47 k8s node1 ku
  • [技术讨论]STM32三种库函数的分析和比较

    STM32库函数可以分为标准库函数 HAL库函数 LL库函数 你问我为什么不说寄存器开发 以为太过于底层 非一般高手驾驭不了 我只是个小菜 所以对于寄存器开发不敢妄自议论 1 标准库函数 标准库函数是C语言的标准库函数 包括stdio h
  • Chisel教程——14.(完结篇)Scala和Chisel中的数据类型

    完结篇 Scala和Chisel中的数据类型 完结篇开头的碎碎念 这是这个系列的最后一篇文章了 官方的Chisel Bootcamp中后面还有FIRRTL相关的内容 但设计一个RISC V CPU这样的目标 靠本系列文章讲述的内容已经足够了
  • 牛客网 第一个只出现一次的字符

    牛客网 第一个只出现一次的字符 时间限制 1秒 空间限制 32768K 热度指数 198167 本题知识点 字符串 算法知识视频讲解 题目描述 在一个字符串 0 lt 字符串长度 lt 10000 全部由字母组成 中找到第一个只出现一次的字
  • numpy log随机产生非常奇怪的数字(np.log的大坑)

    背景 有一批信号数据要送到网络里训练 训练之前为了统一量纲 首先根据方差和均值做了一次标准化 然后求了一次能量 20 log10 x 也就是说送进网络里的其实是一个能量谱 但是训练过程中经常蹦出来一些莫名其妙的数值 理论上我的数据标准化以后
  • Python tkinter自定义多选下拉列表框

    Python tkinter 自定义多选下拉列表框 困扰了我好久 终于在stackoverflow上找到了答案 废话不多说 直接上代码 加滚动条和全选传送门 Python tkinter自定义多选下拉列表框 带滚动条 全选 demo py文
  • 【C++笔试强训】第三十二天

    C 笔试强训 博客主页 一起去看日落吗 分享博主的C 刷题日常 大家一起学习 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 夜色难免微凉 前方必有曙光 选择题 第一题 在计算机网络中 TCP和UDP协议的相似之处是
  • android如何设置自适应大小的背景图片,Android 背景图片自适应方案

    在做移动中间件的过程中 遇到了背景图片自适应的问题 比如一个Button的背景图片 如何让一张图片能够在不同高宽的场景下做到不失真 在做移动中间件的过程中 遇到了背景图片自适应的问题 比如一个Button的背景图片 如何让一张图片能够在不同
  • element ui 表格字段boolean 不显示

    如题后端返回的list 中有值 表格缺没显示 加一个template将true 和false 转为想要的字段即可 这里是三目
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Unity3D里使用自己的dll

    首先 我们需要新建一个类库项目 可以使用Visual Studio或者Monodevelop来做 我这里是使用vs2012来创建 选择好项目类型 写好项目名称 新生成的项目里面默认有一个Class1类 可以通过在解决方案资源管理器里面进行重
  • python类中的main函数_在Python中定义Main函数

    码农那点事儿 关注我们 一起学习进步 源 python程序员 目录 Python中的基本main 函数 Python中的执行模式 基于命令行执行 导入模块或解释器 Main函数的最佳实践 将大部分代码放入函数或类中 使用 name 控制代码
  • 如何搭建mmaction环境,手动安装MMCV

    1 创建虚拟环境并激活 conda create n open mmlab python 3 7 y conda activate open mmlab 2 安装cudatoolkit和cudnn 2 1 查看cudnn版本 conda s
  • Android onCreateOptionsMenu方法是什么时候调用的 ?

    onCreateOptionsMenu是在第一次menu显示的时候调用的 也就是你第一次点击menu按钮 这个时候 你xml配置的menu就会被加载进来 之后你还想更新menu信息 可以使用onPrepareOptionsMenu 也就是从
  • STM32F103C8T6单片机IAP升级

    关于IAP升级的方法和原理 网上已经有很多资料了 这块就不再说了 现在就将bootloader和app配置方法整理如下 APP程序就是一个简单的LED闪烁 APP设置为从FLASH中启动 STM32F103C8T6单片机flash有64K
  • QT风格(QStyle):绘制控件风格设置--QStyleOption

    QStyleOption是风格的设置类 定义了最基本的绘制控件所需的信息 绘制不同控件时 控件所使用的设置类继承QStyleOption 且OptionType值不同 如绘制按钮的风格设置类QStyleOptionButton继承QStyl
  • 记录es几个问题,增删改查,索引创建

    一 es版本 依赖