elasticsearch - 如何在ElasticSearch中识别丢失的文档?

标签 elasticsearch

背景:

在我的ElasticSearch索引中,我有两种类型的文档可以标识为“bvi_ship”和“bvi_notify”。标识为“bvi_ship”的每个文档还应具有标识为“bvi_notify”的相应文档。

问题:

识别没有“bvi_notify”文档的“bvi_ship”文档的合适方法是什么?

使用Facet :

我已经能够使用下面的多面代码来识别必要的文档:

{
   "size":0,
   "query":{
      "filtered":{
         "query":{
            "query_string":{
               "default_operator":"OR",
               "default_field":"_all",
               "query":"@fields.action:\"bv_ship\" OR @fields.action:\"bvi_notify\""
            }
         }
      }
   },
   "facets":{
      "terms":{
         "terms":{
            "field":[
               "@fields.object"
            ],
            "size":1000
         }
      }
   }
}

返回的结果如下所示:
{
  "took" : 147,
  ...
  },
  "hits" : {
    ...
  },
  "facets" : {
    "terms" : {
      ...
      "terms" : [ {
        "term" : "xml",
        "count" : 1443
      }, {
        "term" : "content_ff47d2d096ea4510ac0895941666e507",
        "count" : 2
      }, {
        "term" : "content_fa525becb2724b7682df278c02fed308",
        "count" : 2
      },
        ... THOUSANDS OF RECORDS WITH COUNT of 2
      }, {
        "term" : "content_f1ff2f7440534a08bad4c62b92165949",
        "count" : 1
      } ]
    }
  }
}

这可能很好用,但是当我真的只对计数为1的记录感兴趣时,我显然不想返回数千个计数为2的记录。

有没有一种方法可以限制分面搜索,使其仅返回计数为1的记录?

使用过滤器:

我想我应该能够在查询中更加具体,并且可以使用查询和过滤器的组合来选择适当的记录,尽管我的ElasticSearch Kung-Fu受到我的关系数据库空手道的阻碍。

最佳答案

我认为最好的方法是将带有“bvi_notify”对象的记录索引为带有“bvi_ship”对象的记录的子对象。然后,您将能够在must_not过滤器的bool子句中使用has_child过滤器来查找所有没有相应“bvi_notify”对象的“bvi_ship”文档。

要回答您的原始问题,没有办法将术语方面限制为仅计数为1的术语,但是您可以使用reverse_count顺序对方面进行排序,这会将所有计数为1的术语置于列表的顶部。但是,我还要提到的是,如果分片超过1个,则分面might be incorrect中获得的计数。这是为什么我建议使用父/子解决方案而不是方面的另一个原因。

关于elasticsearch - 如何在ElasticSearch中识别丢失的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749442/

相关文章:

caching - 在内存中缓存大量数据

elasticsearch - 在 elasticsearch 渗透响应中评分

sql - elasticsearch喜欢选择...在哪里...分组...有

elasticsearch - 如何在Elasticsearch提示器中使用Logstash导入CSV数据以完成字段类型

elasticsearch - Elasticsearch 排序-非嵌套元素

c# - C#Nest&Elasticsearch 6.x:如何过滤/计数嵌套字段(在内部List <object>中)

Elasticsearch 更改字段日期格式

json - elasticsearch嵌套查询

elasticsearch - 场对的Elasticsearch频率

elasticsearch - Elasticsearch,搜索以开头的单词