我想检查elasticsearch中是否存在具有特定字段值的文档。
我已经通过互联网,但只找到了如何检查字段是否存在。
我的索引/类型是
/twitter/user
用户名是文档中的一个字段。
我想检查此类型中是否存在username="xyz"
。
答案 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
它将返回存在true
或false
{
"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)
如果您要做的只是检查文档是否存在(您根本对内容不感兴趣),请使用
HEAD
方法而不是GET
方法。HEAD
请求不返回正文,仅返回HTTP标头:
curl -i -XHEAD http://localhost:9200/twitter/user/userid
如果文档存在,Elasticsearch将返回
200 OK
状态代码,如果文档不存在,则返回404 Not Found
注意: userid
是_id
字段的值。