我编写了以下查询,以便搜索have "test" in "message" field
和their length is between 20 and 200
以及none of "user*" are "admin"
和"user3" to "user20" are NULL
所有sorted by "date"
的文档。
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "test",
"default_field": "message"
}
},
{
"term": {
"user20": "NULL"
}
},
{
"term": {
"user19": "NULL"
}
},
{
"term": {
"user18": "NULL"
}
},
{
"term": {
"user17": "NULL"
}
},
{
"term": {
"user16": "NULL"
}
},
{
"term": {
"user15": "NULL"
}
},
{
"term": {
"user14": "NULL"
}
},
{
"term": {
"user13": "NULL"
}
},
{
"term": {
"user12": "NULL"
}
},
{
"term": {
"user11": "NULL"
}
},
{
"term": {
"user10": "NULL"
}
},
{
"term": {
"user9": "NULL"
}
},
{
"term": {
"user8": "NULL"
}
},
{
"term": {
"user7": "NULL"
}
},
{
"term": {
"user6": "NULL"
}
},
{
"term": {
"user5": "NULL"
}
},
{
"term": {
"user4": "NULL"
}
},
{
"term": {
"user3": "NULL"
}
}
],
"filter": [
{
"range": {
"length": {
"gte": 20,
"lte": 200
}
}
}
],
"must_not": [
{
"term": {
"user1": "admin"
}
},
{
"term": {
"user2": "admin"
}
},
{
"term": {
"user3": "admin"
}
},
{
"term": {
"user4": "admin"
}
},
{
"term": {
"user5": "admin"
}
},
{
"term": {
"user6": "admin"
}
},
{
"term": {
"user7": "admin"
}
},
{
"term": {
"user8": "admin"
}
},
{
"term": {
"user9": "admin"
}
},
{
"term": {
"user10": "admin"
}
},
{
"term": {
"user11": "admin"
}
},
{
"term": {
"user12": "admin"
}
},
{
"term": {
"user13": "admin"
}
},
{
"term": {
"user14": "admin"
}
},
{
"term": {
"user15": "admin"
}
},
{
"term": {
"user16": "admin"
}
},
{
"term": {
"user17": "admin"
}
},
{
"term": {
"user18": "admin"
}
},
{
"term": {
"user19": "admin"
}
},
{
"term": {
"user20": "admin"
}
}
]
}
},
"sort": [
{
"date": {
"order": "desc"
}
}
]
}
没有"user3" to "user20" are NULL
条件,查询工作正常,即如果我擦除查询中的所有相应部分。但是,当我再次添加它时,我得到0结果。我确信我的文件符合标准。
有什么问题?有什么建议吗?
答案 0 :(得分:0)
问题是:如何在映射中定义空值?正如您在查询中所写的那样,只有在映射中设置“null_value”:“NULL”时才会起作用。其他方式您可以使用“存在”或“缺失”查询,例如:“exists”:{“field”:“user20”} 你能提供文件的例子吗?