我从this学习弹性搜索 很棒的教程。 要创建' nusearch'索引示例代码给出:
Client.CreateIndex("nusearch", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
.Analysis(Analysis)
)
.Mappings(m => m
.Map<Package>(MapPackage)
)
);
有一个 .Mappings 部分告诉NEST Package类将存储在&#34; nusearch&#34;指数。 为什么我会得到这样的错误:
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().'
尝试以这种方式索引Package时:?
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的意义何在?使用它的最佳做法是什么?它在省略时有效,所以我认为在搜索时有意义吗?
感谢您的回复。
答案 0 :(得分:1)
为什么我会这样得到错误:
给定类型的索引名称为null,并且未设置默认索引。地图 使用ConnectionSettings.MapDefaultTypeIndices()或set的索引名称 使用ConnectionSettings.DefaultIndex()的默认索引。'
尝试以这种方式索引Package时?
错误消息告诉您原因;请求没有索引名称。必须向Elasticsearch提供索引名称,以便它知道索引文档的索引。 NEST is able to infer an index name from a number of different places in order of precedence,因此必须至少设置其中一个。
我想知道为什么有必要添加到ConnectionSettings 再次提供信息,特别是应该存储包类型 索引?
您不必针对特定索引映射特定类型,但这样做很常见。如果你决定不这样做,你要么在每个繁琐的请求上明确指定索引,要么使用默认索引,如果你有多个索引,每个索引都有不同的类型,这可能不是你想要做的。
是否有必要在ConnectionSettings中映射特定的POCO?
不,但这是一种选择。
如果应用程序很大并且您要映射的类型很多,该怎么办?是不是很尴尬?
您可以映射所有类型,或决定不会,这取决于您。我认为定义POCO类型的约定并不那么尴尬 - &gt;在ConnectionSettings上索引一次,而不是在每次请求时提供它。
在我看来,CreateIndex方法是提供这类信息的更好地方。
我不同意;客户端的每个用法可能都不是创建索引(它们可能已经存在,甚至可能由另一个进程创建),因此将约定设置与单例配置选项联系起来是有意义的,这是ConnectionSettings
是什么以及它们应该如何使用。
方法InferMappingFor是MapDefaultTypeIndices的扩展版本吗?
是的,InferMappingFor<T>
可以映射
_id
.TypeName方法对ElasticSearch的确切含义是什么?使用它的最佳做法是什么?
允许您为POCO指定不同于默认情况下推断的类型名称(下限POCO类型名称)。