elasticsearch - Elasticsearch - 在嵌套字段值中搜索键,这是一个 json
问题描述
对于我尝试执行的查询,我需要一些帮助。
我的一个索引中有一个名为 scores 的字段,该字段将一些 ai 模型分数存储为json
. 该字段的基本结构如下(显示索引中的几条记录):
[{"scores":
{"a/b": 1.231,
"a/c": 23.11,
"x/a": 1232.1}},
{"scores":
{"a/d": 3.1}}]
映射类似于:
{"scores":
{"properties":
{"a/b": {"type":"float"},
"a/c": {"type":"float"},
"a/d": {"type":"float"}}}}
另一个字段分数的值json
将具有任意字段,即我json
事先不知道其中存在哪些字段。
我想要做的是搜索里面的键,json
即如果我搜索a/
,它应该返回[“a/b”,“a/d”,“a/c”]。
我知道这可以通过嵌套查询实现,但看起来我需要重新映射我的索引,以便字段分数具有更扁平的数据结构。但是我现在不想这样做,只想使用现有结构并执行我的查询。
如果有人对此有任何想法,请按照我的方式提出。
解决方案
您可以使用_source
来限制检索的内容:
POST indexname/_search
{
"_source": "scores.a/*"
}
或者,您可以使用script_fields
完全相同的方法,但也可以为值修改提供游戏空间:
POST indexname/_search
{
"script_fields": {
"scores_prefixed_with_a": {
"script": {
"source": """params._source.scores.entrySet()
.stream()
.filter(e->e.getKey().startsWith(params.prefix))
.collect(Collectors.toMap(e->e.getKey(),e->e.getValue()))""",
"params": {
"prefix": "a/"
}
}
}
}
}
推荐阅读
- python - 太空入侵者:加载图像
- node.js - 在没有 AuthGuard 的路由上获取 nestjs 中的当前用户
- android - ImageAnalysis.Analyzer CameraX 帧速率下降转换为位图
- javascript - 如何创建带有删除按钮的复选框
- python - Python(初学者),我不明白这两者之间的区别
- haskell - 理解haskell中的类型级函数
- python - Discord.py user.block/user.send_friend_request:错误 403/Forbidden 如何授予机器人发送好友请求和阻止用户的权限?
- c# - 在OpenGL中查找旋转矩阵
- java - Spring Sleuth - JMS ErrorHandler 上的跟踪中断
- c++ - 为什么用户无法提供他们的输入