在elasticsearch中检查文档是否存在

6

我希望检查Elasticsearch中特定字段值的文档是否存在。

我已经查阅了网络,但只找到了如何检查字段是否存在的方法。

我的索引/类型是:

/twitter/user

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

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

4个回答

15

您可以使用大小为0的查询。 total值将给您一个关于文档是否存在的概念。

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

编辑 --

_count api也可以使用。

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

这会很有帮助,只返回记录的总数。 - Sagar Vaghela

8

根据文档

如果您只想检查文档是否存在,而不关心内容,则应使用HEAD方法而不是GET方法。 HEAD请求不返回正文,只返回HTTP标头:

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

如果文档存在,Elasticsearch将返回200 OK状态码...如果不存在,则返回404 Not Found注意: userid_id字段的值。

能否通过Node.js客户端来翻译这个?谢谢。 - Guillaume Cisco
是的,您可以在以下链接中找到有关Elasticsearch JavaScript API的详细信息:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_exists - Guillaume Cisco

2
您可以使用大小为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 是否成立。

2

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

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

你正在寻找的是什么内容?这与IT技术有关。请注意,保留HTML标签。
http://127.0.0.1:9200/twitter/user/_search/exists?q=username:xyz

它将返回存在truefalse

{
    "exists": false
}

第一个查询返回了记录,但我不想要这个记录,另一个在 Elasticsearch 5.* 中不存在。谢谢。 - Sagar Vaghela
是的,我在旧版本中尝试过这个查询,所以不确定最新版本是否适用。 - Govind Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接