无法索引文档

时间:2014-04-16 11:13:12

标签: elasticsearch nest

我使用Elasticsearch.Net& amp;编写了一些代码。 NEST客户端库应该索引文档而不使用POCO来映射字段,因为我有许多不同的文档。

问题1)这是创建索引的正确方法吗,.AddMapping<string>(mapping => mapping.Dynamic(true))是否根据传入的文档创建映射?

var newIndex = client.CreateIndex(indexName, index => index
    .NumberOfReplicas(replicas)
    .NumberOfShards(shards)
    .Settings(settings => settings
    .Add("merge.policy.merge_factor", "10")
    .Add("search.slowlog.threshold.fetch.warn", "1s")
   )
    .AddMapping<string>(mapping => mapping.Dynamic(true))
);

问题2)这可能吗?

string document = "{\"name\": \"Mike\"}";
var newIndex = client.Index(document, indexSelector => indexSelector
        .Index(indexName)
 );

当我在“问题2”中运行代码时,它返回: {"Unable to perform request: 'POST ' on any of the nodes after retrying 0 times."}

1 个答案:

答案 0 :(得分:2)

NEST仅处理类型化对象,在这种情况下,传递一个字符串将导致它将文档索引到/{indexName}/string/{id}

由于它无法从字符串中推断出一个id而你没有通过它,因此它会失败,或者它无法序列化一个字符串。在这种情况下,我会更新客户端以引发更好的例外。

如果要将文档索引为字符串,请使用公开的Elasticsearch.NET客户端,如下所示:

client.Raw.Index(indexName, typeName, id, stringJson);

如果您希望elasticsearch能够提供ID,您可以使用

client.Raw.Index(indexName, type, stringJson);

clientNEST客户端,Raw属性是Elasticsearch.Net客户端,具有相同的连接设置。

请注意,我可能会在下一次测试版更新中使用Raw重命名LowLevel,但仍在辩论。