如果我在以下格式的索引中有两个文档,我只想清除那些包含空JSON而不是我期望的键的文档。
A
{
"search": {
"gold": [1,2,3,4]
}
B
{
"search":{}
}
我应该只得到A json,而不是B json。
我已经尝试过使用现存查询来搜索“ gold”,但是它只是检查非null值并返回列表。 注意:以下内容无法满足我的要求。
GET test/_search
{
"query": {
"bool": {
"must": [
{
"exists": { "field": "search.gold" }}
]
}
}
}
这是一个简单的问题,但是即使在他们的文档中搜索后,我也无法找到解决方法。 如果有人可以帮助我做到这一点,那就太好了。
索引的简化映射为:
"test": {
"mappings": {
"carts": {
"dynamic": "true",
"_all": {
"enabled": false
},
"properties": {
"line_items": {
"properties": {
"line_items_dyn_arr": {
"type": "nested",
"properties": {
"dynamic_key": {
"type": "keyword"
}
}
}
}
}
}
}
}
}
答案 0 :(得分:1)
您是否在 search 字段中存储完整的json? 如果不是这种情况,请共享索引和样本数据的映射。
更新:查询嵌套字段:
{
"query": {
"nested": {
"path": "search",
"query": {
"bool": {
"must": [
{
"exists": {
"field": "search.gold"
}
}
]
}
}
}
}
}
对于嵌套类型字段,我们需要指定要在嵌套字段上执行的 path 和 query 嵌套字段被索引为子文档。
弹性文档:Nested Query
根据所问问题添加的映射进行更新:
{
"query": {
"nested": {
"path": "line_items.line_items_dyn_arr",
"query": {
"exists": {
"field": "line_items.line_items_dyn_arr"
}
}
}
}
}
请注意,我们使用了"path": "line_items.line_items_dyn_arr"
。我们需要提供完整路径的原因是因为nested
字段line_items_dyn_arr
本身在line_items对象下。如果line_items_dyn_arr
是映射的属性,而不是object
或nested
字段的属性,则上一个查询可以正常工作。
答案 1 :(得分:0)
Nishant的答案是正确的,但是由于某些原因,只有当路径和字段是完整路径时,我才能使它起作用。
以下对我有用。
{
"nested": {
"path": "search.gold",
"query": {
"exists": {
"field": "search.gold"
}
}
}
}