gpt4 book ai didi

c# - 如何使用NEST 2.x将C#对象列表存储到ElasticSearch中

转载 作者:行者123 更新时间:2023-12-02 23:28:23 29 4
gpt4 key购买 nike

我正在使用xamarin.forms开发一个跨平台的应用程序,并且试图寻找一种将对象列表直接存储到ElasticSearch中的方法,以便以后可以基于列表的对象搜索结果。我的情况是愚弄:

public class Box {

[String(Index = FieldIndexOption.NotAnalyzed)]
public string id { get; set; }

public List<Category> categories { get; set; }
}


public class Category {

[String(Index = FieldIndexOption.NotAnalyzed)]
public string id { get; set; }

public string name { get; set; }
}

我的目标是能够搜索具有特定类别的所有框。

我尝试按照 the documentation中的说明正确映射所有内容,但是如果这样做,当我存储一个框时,它只会存储第一个类别。

实际上有办法做到吗,还是NEST无法做到?

任何提示都非常欢迎!

谢谢

最佳答案

使用文档中的代码,它应该可以与AutoMap一起正常工作:

如果索引不存在:
var descriptor = new CreateIndexDescriptor("indexyouwant")
.Mappings(ms => ms
.Map<Box>(m => m.AutoMap())
);

然后调用类似:
await client.CreateIndexAsync(descriptor).ConfigureAwait(false);
或者,当不使用异步时:
client.CreateIndex(descriptor);
如果索引已经存在

然后忘记创建上面的CreateIndexDescriptor部分,而只需调用:
await client.MapAsync<Box>(m => m.Index("existingindexname").AutoMap()).ConfigureAwait(false);
或者,当不使用异步时:
client.Map<Box>(m => m.Index("existingindexname").AutoMap());
成功为类型创建映射后,就可以为文档建立索引。

您是否可能首先在一个框中只有一个类别,然后将其映射到索引(在将其制成列表之前)?因为那样您必须手动编辑映射,例如在Sense中。

我不知道您的索引中是否已经有重要数据,但是您也可以删除整个索引(映射也将被删除),然后重试。但是,这样一来,您将丢失所有已经在整个索引中建立索引的文档。

关于c# - 如何使用NEST 2.x将C#对象列表存储到ElasticSearch中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39931708/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com