当前位置: 首页 > 知识库问答 >
问题:

使用NEST C在弹性搜索中删除嵌套文档#

董和风
2023-03-14

如何使用嵌套库在弹性搜索中仅删除嵌套对象而不删除索引。

public class Make
{
   public string MakeId {get;set;}
   public string MakeName {get;set;}
   public string Address { get;set;}

   [ElasticProperty(Type = FieldType.Nested)]
   public List<Cars> Models {get;set;}
}

在上面的映射中,我想删除模型的一个条目,而不删除整个索引。

我尝试使用DeleteByQuery删除,但它会删除整个Make索引。

共有1个答案

柳均
2023-03-14

如果您不介意脚本,可以尝试:

var updateResponse = client.Update<Make>(descriptor => descriptor
    .Id(documentId)
    .Script("ctx._source.models.remove(0)")
    .Lang("groovy"));

或无脚本

var make = new Make {Id = "1", Models = new List<Cars>
{
    new Cars{Name = "test"},
    new Cars{Name = "test2"}
}};

make.Models.RemoveAt(1);

var updateResponse = client.Update<Make>(descriptor => descriptor
    .Id("1")
    .Doc(make));
 类似资料:
  • 尝试排除其中一个子文档与查询不匹配的顶级文档。 对于下面的示例,我试图排除其中一个嵌套作业具有并且与匹配的所有文档。但是,由于其中一个嵌套作业文档与和公司匹配,因此返回此文档。我使用的是一个嵌套查询,其中公司名称必须匹配,并且过滤器的当前值为false。我如何才能使以下文件不被退回?

  • 我已经为一个问题挣扎了一段时间,所以我想我应该通过stackoverflow来解决这个问题。 “我的文档类型”有一个标题、一个语言字段(用于筛选)和一个分组id字段(我省略了所有其他字段以保持重点) 搜索文档时,我希望找到包含标题中文本的所有文档。对于每个唯一的分组id,我只需要一个文档。 我一直在关注tophits聚合,从我所看到的情况来看,它应该能够解决我的问题。 对我的索引运行此查询时: 我

  • 如何获得空数组和美国的结果和

  • 我有一个弹性搜索索引集合,如下所示, 现在我需要通过将与其值匹配来搜索文档。(是一些字段,其值存储在中)例如。对于字段,如果它是,则应与上述文档匹配。 我尝试将其映射为嵌套对象,但我无法编写查询来搜索与其相应值匹配的2个或更多的键id。

  • 我有几个产品的变化,像下面的一个 我正在寻找一个具有以下所有参数的查询 获取某个类别中的所有产品 获取所有黑色的产品 获取尺寸l和M 我当前的查询: 它的工作很好,如果我只搜索1个大小。但是一旦我搜索了2个尺寸,它就不会给出任何记录。我的猜测是,它在每个嵌套变体中寻找所有3个参数,显然它找不到。如何修改要搜索的查询 null 我的第二个问题:

  • 我在Elasticsearch中获得了大量数据。我的douments有一个名为“records”的嵌套字段,它包含一个包含多个字段的对象列表。 我希望能够从记录列表中查询特定的对象,因此我在查询中使用了inner_hits字段,但是这没有帮助,因为聚合使用大小0,所以没有返回结果。 我没有成功地使一个聚集只对inner_hits有效,因为无论查询是什么,聚集都返回记录中所有对象的结果。 这是我正在