elasticsearch - 在 ElasticSearch 中,如何检查一个字段是否存在等于某个值,或者该字段不存在?
问题描述
我想在 elasticsearch 中找到所有文档,其中我的“更新”字段存在并且小于某个值或文档中根本不存在该字段。我可以看到使用 bool 查询,并且 must 和 must not 可以使用,但我如何获得我试图用它们实现的确切场景?
谢谢!
解决方案
假设updated
是一种date
字段,查询将如下所示:
GET test/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "updated"
}
},
{
"range": {
"updated": {
"lte": "2019-06-10"
}
}
}
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "updated"
}
}
]
}
}
]
}
}
}
上面的解释:
让,
- 字段
updated
应该存在 ===>A
- 字段
updated
应小于X
===>B
- 字段
updated
根本不应该存在 ===>C
所需条件转换为(A AND B) OR C
让(A AND B)
_D
现在就弹性而言,它变为:
should
{
D,
C
}
或者
should
{
must
{
A,
B
},
C
}
在上述查询中,仅范围查询就足够了,不需要使用存在查询和范围来检查更新字段的存在。
所以查询可以重写为(B OR C):
GET test/_search
{
"query": {
"bool": {
"should": [
{
"range": {
"updated": {
"lte": "2019-06-10"
}
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "updated"
}
}
]
}
}
]
}
}
}