elasticsearch - 如何在 Elasticsearch 7.5 中过滤嵌套对象?
问题描述
我有一个映射:
"ntol-2020-05" : {
"mappings" : {
{
"properties": {
"_createdAt": {
"type": "date"
},
"_logType": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"device": {
"properties": {
...
}
},
"resp": {
"type": "nested",
"properties": {
"data": {
"type": "nested",
"properties": {
...
}
}
}
}
}
}
}
}
}
我用三个条件过滤:
- “_logType”是“爬虫”。
- “2020-05-23”上的“_createdAt”。
- “resp”的大小 = 0。
我正在尝试使用查询进行过滤:
{"query":{"bool":{"must":[{"term":{"_logType":{"value":"crawler"}}},{"range":{"_createdAt":{" gte":"2020-05-23","lte":"2020-05-23","time_zone":"+07:00"}}},{"nested":{"path":"resp" ,"query":{"script":{"script":{"source":"doc['resp'].size() > 0"}}}}}]}},"from":0,"大小":10}
它返回错误:
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:94)",
"org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:41)",
"doc['resp'].size() > 0",
" ^---- HERE"
],
"script": "doc['resp'].size() > 0",
"lang": "painless",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "No field found for [resp] in mapping with types []"
}
}
如果我使用脚本"doc.containsKey('resp') && doc['resp'].size() > 0"
,那么它将返回命中长度 = 0。
帮我。谢谢!
解决方案
您可以使用存在返回“嵌套”字段“resp”具有值的文档。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "resp",
"query": {
"bool": {
"filter": {
"exists": {
"field": "resp"
}
}
}
}
}
}
]
}
},
"from": 0,
"size": 10
}
推荐阅读
- latex - Pandoc 没有在自定义环境中转换列表
- azure - IoT Edge 解决方案的当前 Application Insights 集成最佳实践
- arrays - 如何转阵列
在 pyspark 中解释? - ruby - 在使用 Ruby 编码倒带文件后,第 1 行中的非法引用 (CSV::MalformedCSVError)
- oracle - GoldenGate OGG-01296 错误是什么意思?
- java - Android Cordova 应用程序的条件编译
- datepicker - 有没有办法从 CoreData 设置起始 DatePicker 值?
- amazon-web-services - 如何通过 AWS EC2 将 DataFrames 从 Pycharm 传输到 AWS S3?
- spring-boot - Spring Boot - 无法通过 Zuul 代理获得 Keycloak 授权 api 的响应
- docker - 如何只显示某个 docker 服务的一个副本的日志而不包括其名称?