在elasticsearch中,检查文档字段是否存在的最佳方法是什么?我在文档中找不到任何东西。
例如,如果此文档没有字段/键“price”,我不想在结果中返回它。
{
"updated": "2015/09/17 11:27:27",
"name": "Eye Shadow",
"format": "1.5 g / 0.05 oz",
}
我能做什么?
在elasticsearch中,检查文档字段是否存在的最佳方法是什么?我在文档中找不到任何东西。
例如,如果此文档没有字段/键“price”,我不想在结果中返回它。
{
"updated": "2015/09/17 11:27:27",
"name": "Eye Shadow",
"format": "1.5 g / 0.05 oz",
}
我能做什么?
您可以像这样使用exists
过滤器与bool/must
过滤器组合:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "price"
}
},
... <-- your other constraints, if any
]
}
}
}
}
}
已废弃 (自ES5起) 您也可以使用missing
过滤器与bool/must_not
过滤器结合使用:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"missing": {
"field": "price"
}
}
]
}
}
}
}
}
exists
query 替换了ES 2.1中的 exists
过滤器,其工作方式相同。同时移除了missing filter,missing query已被弃用。"bool": {
"must": {
"exists": {
"field": "my_field"
}
}
}
要获取所有不包含特定字段的文档,可以像这样使用must_not
"bool": {
"must_not": {
"exists": {
"field": "my_field"
}
}
}
Elastic 文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html
您可以直接执行
{
"query": {
"exists": {
"field": "fieldName"
}
}
}
如果你想要添加一些匹配项,那么你可以尝试
{
"query": {
"bool": {
"must": [{
"match": {
"fieldName": "value"
}
},
{
"exists": {
"field": "fieldName"
}
}]
}
}
}
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html
{
"query": {
"filtered": {
"filter": {
"exists": {
"field": "status"
}
},
"query": {
"match_all": {}
}
}
}
}
您好,Alain:
GET /_search
{
"query": {
"exists" : { "field" : "price" }
}
}
来源:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html
存在查询可以用于查找具有指定字段的文档。该查询将匹配至少存在一个非空值的文档。
下面是一个例子:
{
"exists": { "field": "user" }
}
这个查询会匹配那些至少包含一个非空"user"字段的文档。它还可以被嵌套在其他查询中,例如bool查询。
price
字段,那么它也不能有price
值,因此没有price
字段的文档将无法匹配。 - Valmissing
已经被弃用,但exists
没有。 - Val