elasticsearch - Elasticsearch - 对象类型,搜索嵌套元素
问题描述
我正在使用 Elasticsearch 7.2.0 版,并且在我的映射中有以下类型:
"status_change": {
"type": "object",
"enabled": false
},
该字段内的数据示例:
"before": {
"status_type": "Status One"
},
"after": {
"status_type": "Status Two"
}
有各种状态类型,我正在尝试创建一个查询来识别从状态类型之前指定到状态类型之后指定的更改。我正在努力通过这些嵌套元素进行查询,并且以下查询失败:
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"nested": {
"path": "status_change",
"query": {
"term": {
"status_change.before": "the_before_status"
}
}
}
}
}
}
}
和:
"caused_by" : {
"type" : "illegal_state_exception",
"reason" : "[nested] nested object under path [status_change] is not of nested type"
}
这是不言自明的,因为 status_change 不是“嵌套”字段。我曾尝试通过嵌套元素来搜索对象,但我还没有找到解决方案。
有没有办法让我像这样搜索嵌套的对象元素?
解决方案
您没有使用nested
类型,而是使用object
类型。有区别,我建议您浏览上述链接。
如果您使用的是嵌套类型
将您的映射更改为以下内容:
"status_change": {
"type": "nested"
}
一旦你这样做,然后重新索引文档,你拥有的查询将简单地返回包含文档列表,status_change.before: the_before_status
无论你status_change.after
在文档中拥有什么值。
要基于 进行进一步过滤,请在该字段中status_change.after
添加另一个must
子句以返回您正在查找的文档。
如果您使用对象类型
只需enabled: false
从映射中删除该字段并将查询更改为以下内容:
POST <your_index_name>/_search
{
"query": {
"bool": {
"filter": [
{
"match": {
"status_change.before.status_type": "the_before_status"
}
}
]
}
}
}
希望有帮助!
推荐阅读
- xamarin.forms - Xamarin.Forms: CollectionView v/s ListView v/s TableView
- python - /createPost 处的 ValueError 无法分配“
大家好,我正在尝试使用 Django 发布图像文件。我不知道发生了什么,我在尝试修复一个错误时遇到了另一个错误,所以请查看代码,我在 /createPost 处遇到 ValueError 无法分配“<SimpleLazyObject: <d
- git - 如何将 Git Repo 从一个帐户克隆到另一个帐户
- amazon-web-services - 使用 AWS S3 和 CloudFront 进行 HTTP/2 服务器推送
- python - 将类的实例存储在字符串中
- swift - CGDisplayCreateImage doesn't have cursor
- journal - Is "Results in engineering; ISSN : 2590-1230" a Scopus indexed journal?
- sql - Join two Json arrays to one with key and value postgresql
- linux - Why downloaded file docx is broken?
- java - 如何从日志文件中拆分消息?