我正在从这个很棒的教程中学习Elasticsearch 。创建“ nusearch”索引的示例代码如下:
Client.CreateIndex("nusearch", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
.Analysis(Analysis)
)
.Mappings(m => m
.Map<Package>(MapPackage)
)
);
有一个.Mappings部分,它告诉NEST Package类将存储在“ 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().'
尝试以这种方式对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到底意味着什么?什么是使用它的最佳实践?它在省略时有效,所以我认为搜索时有意义吗?
感谢您的提前答复。
为什么会出现这样的错误:
给定类型的索引名称为null,并且未设置默认索引。使用ConnectionSettings.MapDefaultTypeIndices()映射索引名称,或使用ConnectionSettings.DefaultIndex()设置默认索引。
尝试以这种方式对Package编制索引时?
错误消息告诉您原因;没有该请求的索引名。必须向Elasticsearch提供索引名称,以便它可以知道在哪个索引中对文档建立索引。NEST能够根据优先级从多个不同的位置推断出索引名称,因此必须设置其中至少一个。
我想知道为什么必须再次向ConnectionSettings添加信息,即Package类型应该存储在特定索引中?
您不必针对特定的索引映射特定的类型,但是这样做很普遍。如果您决定不这样做,则可以在每个请求上明确指定索引,这很麻烦,或者您使用默认索引,如果您有多个索引且每个索引都具有不同的类型,则可能不需要这样做。
是否有必要在ConnectionSettings中映射特定的POCO?
不,但这是一个选择。
如果应用程序很大并且要映射的类型很多怎么办?那不是很尴尬吗
您可以映射所有类型,也可以决定不映射,这取决于您。我想说,在ConnectionSettings上一次定义POCO类型的约定->索引要比在每个请求中都提供它要方便得多。
在我看来,CreateIndex方法是提供此类信息的更好位置。
我不同意; 客户端的每次使用都可能不会创建索引(它们可能已经存在,甚至可能是由另一个进程创建的),因此将约定设置与单例配置选项相关联是有意义的,单例配置选项是什么ConnectionSettings
以及应如何使用它们。
方法InferMappingFor是MapDefaultTypeIndices的扩展版本吗?
是的,InferMappingFor<T>
可以地图
_id
.TypeName方法对ElasticSearch到底意味着什么?什么是使用它的最佳实践?
允许您为POCO指定与默认情况下不同的类型名称(小写的POCO类型名称)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句