【发布时间】:2017-08-01 10:34:54
【问题描述】:
我想检查具有特定字段值的文档在 elasticsearch 中是否存在。
我已经上网但只找到了如何检查一个字段是否存在。
我的索引/类型是
/twitter/user
用户名是文档中的一个字段。
我想检查username="xyz"在这个类型中是否存在。
【问题讨论】:
标签: elasticsearch
我想检查具有特定字段值的文档在 elasticsearch 中是否存在。
我已经上网但只找到了如何检查一个字段是否存在。
我的索引/类型是
/twitter/user
用户名是文档中的一个字段。
我想检查username="xyz"在这个类型中是否存在。
【问题讨论】:
标签: elasticsearch
您可以使用大小0 进行查询。 total value 会让你知道 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"
}}}
【讨论】:
如果您只想检查文档是否存在(您对内容根本不感兴趣),请使用
HEAD方法而不是GET方法。HEAD请求不返回正文,仅返回 HTTP 标头:
curl -i -XHEAD http://localhost:9200/twitter/user/userid
如果文档存在,Elasticsearch 将返回一个
200 OK状态码……如果不存在,则返回一个404 Not Found
注意: userid 是 _id 字段的值。
【讨论】:
只搜索文档,如果存在则返回结果,否则不返回
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
它将返回存在true 或false
{
"exists": false
}
【讨论】:
您可以使用大小为 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
【讨论】: