检查弹性搜索中是否存在文档的奇特/有效方法

era*_*ran 8 elasticsearch

如果存在带有_id的文档,那么测试的最有效方法是什么?

我显然可以这样做:

curl -XGET localhost:9200/my_index/my_doctype/<_id>?fields=_id'.
Run Code Online (Sandbox Code Playgroud)

或者我可以使用: 如何在ElasticSearch上检查重复数据? 我想,并发送一份空文件.

什么更有效率?

Lou*_*eau 15

您可以使用HTTP HEAD动词仅检索标头.

curl -XHEAD --dump-header - localhost:9200/index/type/doc
Run Code Online (Sandbox Code Playgroud)

它将为您提供200或404,而不包含文档正文的任何​​部分.


Mic*_*cah 6

如果在之前的版本上2.1,您可以使用"搜索存在API".

一个例子:

用户"kimchy"在twitter索引中搜索推文类型

$ curl -XGET 'http://localhost:9200/twitter/tweet/_search/exists?q=user:kimchy'
Run Code Online (Sandbox Code Playgroud)

如果该用户有任何推文,响应正文将包含true或false:

{
  "exists" : true
} 
Run Code Online (Sandbox Code Playgroud)

您也可以像这样在请求体中发送查询(POST或GET都可以):

curl -XGET 'http://localhost:9200/twitter/tweet/_search/exists' -d '
{
    "query" : {
    "term" : { "user" : "kimchy" }
    }
}'
Run Code Online (Sandbox Code Playgroud)

答案是一样的.

  • 提醒一下,官方文档称Search Exists API"在2.1.0中已弃用".`HEAD`是推荐的方式:https://www.elastic.co/guide/en/elasticsearch/guide/current/doc-exists.html (2认同)