我正在使用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不可能?
非常欢迎任何提示!
由于
答案 0 :(得分:1)
使用文档中的代码可以正常使用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中。
我不知道您的索引中是否已有重要数据,但您也可以删除整个索引(映射也将被删除)并再次尝试。但是,您将丢失已在整个索引中编入索引的所有文档。