【发布时间】:2017-11-11 21:24:57
【问题描述】:
我正在从 this 学习弹性搜索 很棒的教程。 给出了创建“nusearch”索引的示例代码:
Client.CreateIndex("nusearch", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
.Analysis(Analysis)
)
.Mappings(m => m
.Map<Package>(MapPackage)
)
);
有一个 .Mappings 部分告诉 NEST 包类将存储在“nusearch”索引中。 为什么会出现这样的错误:
Index name is null for the given type and no default index is set. Map an index name using ConnectionSettings.MapDefaultTypeIndices() or set a default index using ConnectionSettings.DefaultIndex().'
当试图以这种方式索引包时?:
foreach (Package pack in packages)
{
Client.Index<Package>(pack);
}
ConnectionSettings 配置简化为:
_connectionSettings = new ConnectionSettings(CreateUri(9200));
我想知道为什么需要再次向 ConnectionSettings 添加 Package 类型应该存储在特定索引中的信息? 是否有必要在 ConnectionSettings 中映射特定的 POCO? 如果应用程序很大并且您有很多类型要映射怎么办?那不是很尴尬吗? 在我看来, CreateIndex 方法是提供此类信息的更好地方。
我已经检查过这样的代码是否可行:
_connectionSettings = new ConnectionSettings(CreateUri(9200))
.MapDefaultTypeIndices(m => m.Add(typeof(Package), "nusearch"))
或:
.InferMappingFor<Package>(i => i
.TypeName("package")
.IndexName("nusearch"))
)
方法 InferMappingFor 是 MapDefaultTypeIndices 的扩展版本?
如果您能另外告诉我:.TypeName 方法对于 ElasticSearch 究竟意味着什么?使用它的最佳做法是什么?它在省略时有效,所以我认为在搜索时有意义?
感谢您提前回复。
【问题讨论】:
标签: c# elasticsearch nest