检查Elasticsearch文档中是否存在字段的最佳方法

Eka*_*yas 30 document field exists elasticsearch

可能是一个非常愚蠢的问题,检查elasticsearch中的文档字段是否存在的最佳方法是什么?我在文档中找不到任何内容.

例如,如果此文档没有字段/键"价格",我不想在结果中返回.

{"更新":"2015/09/17 11:27:27","名称":"眼影","格式":"1.5克/0.05盎司",}

我可以做什么?

谢谢

Val*_*Val 44

您可以将exists过滤器bool/must过滤结合使用,如下所示:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "exists": {
                "field": "price"
              }
            },
            ...     <-- your other constraints, if any
          ]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

DEPRECATED(自ES5起)您还可以使用missing过滤器结合bool/must_not过滤器:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "missing": {
                "field": "price"
              }
            }
          ]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Dev*_*evi 11

exists过滤器已取代exists 查询从ES 2.1,但它的工作是一样的.此外,删除了丢失的过滤器,并且不推荐使用丢失的查询.

要获得具有特定字段的所有文档,

"bool": {
    "must": {
        "exists": {
            "field": "my_field"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并获得不具有某一领域的所有文档,与使用must_not这样的

"bool": {
    "must_not": {
        "exists": {
            "field": "my_field"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

弹性文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html


Sur*_*hit 10

你可以直接做

{
    "query": {
        "exists": {
            "field": "fieldName"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想添加一些比赛,那么你可以去

{
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "fieldName": "value"
                }
            },
            {
                "exists": {
                    "field": "fieldName"
                }
            }]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html


小智 9

您可以使用exists过滤器:

{
  "query": {
    "filtered": {
      "filter": {
        "exists": {
          "field": "status"
        }
      },
      "query": {
        "match_all": {}
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此致,阿兰