我在弹性搜索索引中添加了一个新的嵌套对象字段。我想用一些默认值更新字段,例如[{“ key”:“ xyz”,“ value”:“ val1”}]。我正在尝试查询字段值为空或null的索引,但未成功。
我已经试过了
"bool": {
"must_not": {
"exists": {
"field": "PropertyFields"
}
}
}
样本数据
[{“ Id”:1,“ subjectPropertyFields”:[{“ value”:“ xyz”,“ key”:“ zzz”}]},{“ Id”:2},{“ Id”:3}]
我想查询ID 2,3
如果要查找缺少嵌套对象字段的文档,则可以将must_not
布尔查询与存在查询结合使用。
添加带有索引数据,映射,搜索查询和搜索结果的工作示例
索引映射:
{
"mappings": {
"properties": {
"subjectPropertyFields": {
"type": "nested"
}
}
}
}
索引数据:
{
"Id": 1,
"subjectPropertyFields": [
{
"value": "xyz",
"key": "zzz"
}
]
}
{
"Id": 2
}
{
"Id": 3
}
搜索查询:
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "subjectPropertyFields",
"query": {
"bool": {
"filter": {
"exists": {
"field": "subjectPropertyFields"
}
}
}
}
}
}
]
}
}
}
搜索结果:
"hits": [
{
"_index": "65047473",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"Id": 2
}
},
{
"_index": "65047473",
"_type": "_doc",
"_id": "3",
"_score": 0.0,
"_source": {
"Id": 3
}
}
]
@Ajay Kumar请仔细回答我的问题,让我知道这是否可以解决您的问题?
@Ajay Kumar感谢您接受答案,您是否也可以对答案进行投票:)
谢谢,如果我需要添加其他查询(如isdata = true)和相同的现有查询逻辑,您可以帮助我吗?
@AjayKumar,您可以对布尔查询(带有match子句)使用相同的组合,如果您可以针对新的要求针对相同的问题提出一个单独的问题,那就更好了:)
@AjayKumar您的文档中是否存在一个名为的字段
isdata
?