es获取mapping中所有的字段(回溯)

这篇具有很好参考价值的文章主要介绍了es获取mapping中所有的字段(回溯)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        有时候想看看es中某个索引中所有的字段,直接通过查询mapping是很难看出所有的字段的,里面包含的属性太多了。本博文将实现获取mapping中所有字段的算法。

示例new_user2索引中的mapping值:

{
	"new_user2": {
		"mappings": {
			"properties": {
				"address": {
					"properties": {
						"city": {
							"type": "text",
							"fields": {
								"keyword": {
									"type": "keyword",
									"ignore_above": 256
								}
							}
						},
						"province": {
							"type": "text",
							"fields": {
								"keyword": {
									"type": "keyword",
									"ignore_above": 256
								}
							}
						}
					}
				},
				"age": {
					"type": "long"
				},
				"name": {
					"type": "text",
					"fields": {
						"keyword": {
							"type": "keyword",
							"ignore_above": 256
						}
					}
				}
			}
		}
	}
}

示例代码:【直接在mapping中获取】

import json

with open('text.txt', 'r', encoding='utf-8') as f:
    data = f.read()

json_data = json.loads(data)
# print(json_data)

for key, value in json_data.items():
    index = key
    mappings = value


def func(dic):
    res = []

    def traceback(mapping, fields_join):
        if not isinstance(mapping, dict):
            return res.append(fields_join)
        for key, value in mapping.items():
            if fields_join:
                traceback(value, fields_join + '.' + key)
            else:
                traceback(value, key)

    def filter_fields(fields: list):
        fields_lst = []
        for field in fields:
            field = field.replace('mappings.properties.', '').replace('.properties', '')
            # 注意:下面几个判断最好替换字符串长的在前面,防止出错
            if field[-28:] == '.fields.keyword.ignore_above':
                field = field[:-28]
            elif field[-20:] == '.fields.keyword.type':
                field = field[:-20]
            elif field[-15:] == '.fields.keyword':
                field = field[:-15]
            elif field[-5:] == '.type':
                field = field[:-5]
            fields_lst.append(field)
        return list(set(fields_lst))

    traceback(dic, '')
    return filter_fields(res)


ret = func(mappings)
print("index: ", index)
print("fields: ", ret)

运行结果:

es获取mapping中所有的字段(回溯)

注意:也可以直接通过查询语句,直接在es中查询,通过响应的数据中获取:res['hits']['hits']。但是,由于查询出的数据未必所有字段都是有数据的,所有这种方法不是准确的。最好还是直接从获取到的_mapping中直接获取!文章来源地址https://www.toymoban.com/news/detail-512692.html

到了这里,关于es获取mapping中所有的字段(回溯)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • es查询响应结果中获取某些字段的值

            有时候使用es查询出的结果包含多个字段,如果数据中仅仅包含几个字段时,我们是很容易挑出自己需要的字段值,但是如果数据中包含几十或者几百甚至更多时,尤其是数据中嵌套好多层时,不容易直接挑取出需要的值,这时候可以借助程序直接查找出来。或者

    2024年02月12日
    浏览(43)
  • 修改网络地址ip时出现“出现了一个意外的情况。不能完成所有你在设置中所要求的更改。”

    解决办法: win+R,输入cmd;以管理员的身份运行 出现命令提示符窗口后,输入一下2条指令 tcp-ipv4的ip地址及NDS将会更改为自动获取; 输入以下2条指令 将会设置成自己所想要的设置的ip地址。 注: 出现该问题可能是因为自己在移动硬盘上面装载了vmware所导致的。Vm会装虚拟网

    2024年02月05日
    浏览(77)
  • 解决Win10IP设置出错:“出现了一个意外的情况,不能完成所有你在设置中所要求的更改”

    在学校链接校园网或者使用分配IP进行联网,需要修改IP等,有时出现“出现了一个意外的情况,不能完成所有你在设置中所要求的更改”的错误。解决方法如下: 1.搜索栏cmd,右键 管理员身份 打开命令提示符 2.输入 netsh 回车,在输入 interface 回车 3.输入 ip 回车 4.输入IP地址

    2024年02月04日
    浏览(62)
  • OPENCV 帮你利用鼠标获取图片中所需景物的位置

    第一次发表文章,不好请见谅,代码如下:  这采用的是pycharm,所以第一步,先导入opencv-python库,即: import cv2 在opencv中有着鼠标时间,这边便是用鼠标回调函数获取当前的坐标值, 只需将img = cv2.imread(\\\'duola.jpg\\\')中的图片换成你需要的图片,便可通过鼠标的移动得到当前所在

    2024年02月11日
    浏览(35)
  • 给某个接口,单独添加一个特有的请求头字段

    要给某个接口,单独添加一个特有的请求头字段,可以在使用axios发送请求时,通过设置headers来添加自定义的请求头字段。 如下,给login接口添加一个名为\\\"X-Custom-Header\\\"的特有请求头字段: 在axios请求的配置对象中添加了一个headers字段,并将\\\"X-Custom-Header\\\"设置为\\\"dnf\\\",你可以根

    2024年02月15日
    浏览(27)
  • mysql统计所有分类下的数量,没有的也要展示

    要求统计所有分类下的数量,如果分类下没有对应的数据也要展示。这种问题在日常的开发中很常见,每次写每次忘,所以在此记录下。 这种统计往往不能直接group by,因为有些类别可能没有对应的数据 这里有两个思路(如果您有更好的方法,请一定要告诉我,求求了):

    2024年03月28日
    浏览(40)
  • ※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

    ---------------🎈🎈257. 二叉树的所有路径 题目链接🎈🎈------------------- 时间复杂度O(N) 空间复杂度O(N) 深度优先遍历 添加了 StringBulider 替代字符串拼接提升效率 toString() 转化为String .append() 添加元素 时间复杂度O(N) 空间复杂度O(N)

    2024年02月20日
    浏览(29)
  • 一篇文章带你重新回溯单链表的所有

    🍉博客主页:阿博历练记 📗文章专栏:数据结构与算法 🚚代码仓库:阿博编程日记 🌹欢迎关注:欢迎友友们订阅收藏+关注哦 友友们,上期给大家介绍完顺序表功能实现之后,我们知道了它的一个绝对优势就是 下标的随机访问 ,但是顺序表也有以下几个不优的特点:

    2024年02月05日
    浏览(47)
  • 算法-回溯相关问题-生成所有n位长的二进制字符串 Java版

    生成所有n位长的二进制字符串。假设A[0…n-1]是一个大小为n的数组。

    2024年02月16日
    浏览(27)
  • ElasticSearch索引mapping添加字段

    ES版本5.3.0,在已存在的索引mapping中添加字段。 如下: my_index索引名称,my_type为索引类型名称,new_field_name为新增的字段名称。 如下: 返回为true代表添加操作成功。

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包