检查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

它将返回存在truefalse


    "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中是不是存在文档的主要内容,如果未能解决你的问题,请参考以下文章

jQuery检查元素是不是存在[重复]

检查 pymongo 中是不是存在文档

如何检查文档是不是存在于flutter中?

如何检查 Flutter Firestore 中是不是存在用户文档?

如何检查给定节点是不是存在于 XML 文档中

如何检查文档字段类型数组中是不是存在元素?扑