例如,我有2种类型的文档,例如
{
"field2":"xx",
"field1","x"
}
{
"field1","x"
}
一个有2个字段(field1
和field2
),另一个只有1个字段(field1
)。
现在,我想查询所有没有field2
字段的文档?
EIDT DSL:
{
"query": {
"bool": {
"filter": [
{
"exists": {
"field": "LableToMember"
}
}
]
}
}
}
DOC:
{
"LableToMember": [
{
"xxx": "xxx",
"id": "1"
}
],
"field2":"xxx"
}
LableToMember
是一个嵌套字段。我发现exists
api不能用于嵌套字段吗?
答案 0 :(得分:2)
请注意,在ES 5.x中,missing
query has been removed赞成exists
。
因此,如果你想要向前兼容,你应该更喜欢使用它:
POST /_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "field2"
}
}
}
}
}
<强>更新强>
如果您要检索所有没有field2
或field2
且具有给定值的文档,您可以这样做:
POST /_search
{
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"must_not": {
"exists": {
"field": "field2"
}
}
}
},
{
"term": {
"field2": "somevalue"
}
}
]
}
}
}
答案 1 :(得分:0)
简而言之,您希望查询缺少field2
的文档。您可以使用Missing Query之类的:
"filter" : {
"missing" : { "field" : "field2" }
}
希望有所帮助