检查elasticsearch中是否存在文档

时间:2017-08-01 10:34:55

标签: elasticsearch

我想检查elasticsearch中是否存在具有特定字段值的文档。

我已经通过互联网,但只找到了如何检查字段是否存在。

我的索引/类型是

/twitter/user

用户名是文档中的一个字段。

我想检查此类型中是否存在username="xyz"

4 个答案:

答案 0 :(得分:2)

只需搜索文档,如果存在则会返回结果,否则不会

http://127.0.0.1:9200/twitter/user/_search?q=username:xyz

确切地说你要找的是

http://127.0.0.1:9200/twitter/user/_search/exists?q=username:xyz

它将返回存在truefalse

{
    "exists": false
}

答案 1 :(得分:1)

您可以使用尺寸0进行查询。 total值会让您了解doc是否存在。

GET /twitter/user/_search
{"size": 0,
  "query": {"match": {
  "username": "xyz"
}}}

已编辑 -

_count api can be used as well.

GET /twitter/user/_count
{ "query": {"match": {
  "username": "xyz"
}}}

答案 2 :(得分:1)

您可以使用大小为0的术语查询。请参阅以下查询以供参考:

POST twitter/user/_search
{
    "query": {
        "term": {
           "username": "xyz"
        }
    },
    "size" : 0
}

响应:

{
"took": 1,
"timed_out": false,
"_shards": {
  "total": 5,
  "successful": 5,
  "failed": 0
},
"hits": {
  "total": 1,
  "max_score": 0,
  "hits": []
}
}

您将获得 hits.total 中的总文档数,然后您可以检查 count> 0

答案 3 :(得分:0)

来自documentation

  

如果您要做的只是检查文档是否存在(您根本对内容不感兴趣),请使用HEAD方法而不是GET方法。 HEAD请求不返回正文,仅返回HTTP标头:

curl -i -XHEAD http://localhost:9200/twitter/user/userid
  

如果文档存在,Elasticsearch将返回200 OK状态代码,如果文档不存在,则返回404 Not Found

注意: userid_id字段的值。