【问题标题】:Creating Elasticsearch Index using NEST 5.x使用 NEST 5.x 创建 Elasticsearch 索引
【发布时间】:2017-04-04 06:46:42
【问题描述】:

我正在尝试使用 Elasticsearch 5.x 的 NEST 5.x 预发布版本创建索引。我有来自 2.x 的示例,它显示了如何使用 ElasticClient.CreateIndex 方法创建索引。下面是我的示例代码。

ESnode = new Uri("http://localhost:9200");
Nodesettings = new ConnectionSettings(ESnode);
Client = new ElasticClient(Nodesettings);

但是,当我在下面输入时,没有可用的自动完成功能。

Client.CreateIndex( c => c.

我能够使用以下代码成功获取节点的运行状况。

var res = Client.ClusterHealth();
Console.WriteLine("Status:" + res.Status);

我有一个复杂的文档映射,我已经为其定义了类结构并打算使用 Automap 方法。因此,我尝试以编程方式创建索引以避免手动创建索引。

我尝试使用一些非常旧版本的 NEST (1.x),我能够获得 createIndex 的自动完成功能。但是 v2.4x 和 5.x 都没有提供自动完成功能。有没有创建索引的新方法?请告诉我。

谢谢

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    除了提供额外索引创建选项的委托之外,您还需要为索引提供一个名称

    var createIndexResponse = client.CreateIndex("index-name", c => c
        .Settings(s => s
            .NumberOfShards(1)
            .NumberOfReplicas(0)
        )
        .Mappings(m => m
            .Map<Conference>(d => d
                .AutoMap()
            )
        )
    );
    

    【讨论】:

    • 感谢拉斯。我正要删除这个问题,因为我通过试验发现了它。我能够创建索引。但我有第二个问题。当我使用 Automap 时,即使是嵌套属性也被映射为简单属性。此外,我注意到的第二个问题是所有属性都按属性名称排序(当我尝试 GET 映射时)。我该如何纠正这些?
    • CLR 类型将在使用 .AutoMap() 时默认映射为 object 字段映射(除了 NEST 中已知的那些,例如 Attachment 类型)。为了映射为nested 类型,您需要使用.Properties() 覆盖自动映射:elastic.co/guide/en/elasticsearch/client/net-api/5.x/…。关于 json 中的属性名称,它们永远不能保证在 json 中具有任何特定的顺序,因此不应依赖顺序。
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    相关资源
    最近更新 更多