检查elasticsearch中是不是存在文档
Posted
技术标签:
【中文标题】检查elasticsearch中是不是存在文档【英文标题】:Check if document exists or not in elasticsearch检查elasticsearch中是否存在文档 【发布时间】:2017-08-01 10:34:54 【问题描述】:我想检查具有特定字段值的文档在 elasticsearch 中是否存在。
我已经上网但只找到了如何检查一个字段是否存在。
我的索引/类型是
/twitter/user
用户名是文档中的一个字段。
我想检查username="xyz"
在这个类型中是否存在。
【问题讨论】:
【参考方案1】:您可以使用大小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"
【讨论】:
这会有帮助,只返回记录总数【参考方案2】:来自documentation:
如果您只想检查文档是否存在(您对内容根本不感兴趣),请使用
HEAD
方法而不是GET
方法。HEAD
请求不返回正文,仅返回 HTTP 标头:
curl -i -XHEAD http://localhost:9200/twitter/user/userid
如果文档存在,Elasticsearch 将返回一个
200 OK
状态码……如果不存在,则返回一个404 Not Found
注意: userid
是 _id
字段的值。
【讨论】:
【参考方案3】:只搜索文档,如果存在则返回结果,否则不返回
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
【讨论】:
第一个查询返回记录,但我不想要该记录,并且弹性搜索 5.* 中不存在其他记录。谢谢 是的,我在旧版本中尝试过这个查询,所以不确定最新版本【参考方案4】:您可以使用大小为 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
【讨论】:
以上是关于检查elasticsearch中是不是存在文档的主要内容,如果未能解决你的问题,请参考以下文章