当前位置: 首页 > news >正文

golang es查询的一些操作,has_child,inner_hit,对索引内父子文档的更新

1.因为业务需要查询父文档以及其下子文档,搞了很久才理清楚。
首先还是Inner_hits,inner_hits只能用在nested,has_child,has_parents查询里面

{"query": {"nested": {"path": "comments","query": {"match": { "comments.text": "awesome" }},"inner_hits": {}  // 使用inner_hits来返回匹配的comments}}
}
"has_child": {"type": "dys_static_info.md5","inner_hits":{},childQuery}

如果直接用在开始查询的对象里面,查询会报错
在这里插入图片描述
然后这里明确一个概念,has_child是查父文档的,里面加了inner_hits多返回的inner_hits是子文档的内容。同理,has_parent查子文档的,面加了inner_hits多返回的inner_hits是父文档的内容。

2.还是业务需求,一个索引下面有多种类型的文档,他们之间是父子关系,如果我要更新一个文档里面的值无法直接更新,需要使用script.比如我要更新index索引下面doc文档里面的filed1字段和filed2字段,更新条件是filed3字段为123。要这么写·

POST /index/_update_by_query
{"script": {"source": "ctx._source['doc']['filed1'] = params.tags;ctx._source['doc']['filed2'] = params.state;","lang": "painless","params": {"tags": [1, 2],"state":"W"}},"query": {"term": {"doc.filed3.keyword": "123"}}
}

然后使用golang的github.com/olivere/elastic/v7 得这么写

updateQuery := elastic.NewTermQuery("doc.filed3.keyword", "123")
script = elastic.NewScript(`ctx._source['doc']['filed1'] = params.tags;ctx._source['doc']['filed2'] = params.state;`).Params(map[string]interface{}{"tags": TagList, "state": SampleState})
_, err = global.GVA_ES.UpdateByQuery("index").Query(updateQuery).Script(script).Do(context.Background())if err != nil {return}response.Ok(c)
}
http://www.lryc.cn/news/336393.html

相关文章:

  • 精准备份:如何自动化单个MySQL数据库的备份过程
  • Green Hills 自带的MULTI调试器查看R7芯片寄存器
  • Jupyter Notbook如何安装配置并结合内网穿透实现无公网IP远程连接使用
  • LightM-UNet:Mamba 辅助的轻量级 UNet 用于医学图像分割
  • 探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析
  • day16 java object中equals、finalize、
  • 如何应用电桥电路的原理?
  • 大话设计模式——24.迭代器模式(Iterator Pattern)
  • 【数据结构】双向链表 C++
  • 消息队列之-----------------zookeeper机制
  • 第十届蓝桥杯大赛个人赛省赛(软件类) CC++ 研究生组2.0
  • vscode开发ESP32问题记录
  • R语言复现:轨迹增长模型发表二区文章 | 潜变量模型系列(2)
  • 【数据结构】顺序表的实现——动态分配
  • 3.3.k8s搭建-rancher RKE2
  • CST电磁仿真软件的设置变更与问题【官方教程】
  • 保研线性代数复习3
  • 从零开始学Spring Boot系列-集成MyBatis-Plus
  • 【云原生篇】k8s之Deployment详解
  • linux安装dubboAdmin
  • Android 系统编译 and 应用裁剪
  • java数组.day16(冒泡排序,稀疏数组)
  • vue+springboot多角色登录
  • 使用 ADB 查找应用名称和活动名称,并启动指定页面
  • LangChain - 文档转换
  • 【C++】STL--list
  • 二. CUDA编程入门-双线性插值计算
  • 实时计算平台设计方案:913-基于100G光口的DSP+FPGA实时计算平台
  • Glide系列-自定义ModuleLoader
  • 设计模式——责任链模式13