如何使用 NEST for ElasticSearch lib 使用属性指定索引名称?

How to specify the index name using attribute using NEST for ElasticSearch lib?

如何使用 NEST for ElasticSearch 使用属性指定索引名称?

这是我使用的 POCO class:

[Serializable]
[ElasticsearchType(IdProperty = "msgid")]
public class Message
{
    [PropertyName("msgid")]
    public string Id { get; set; }

    [PropertyName("date")]
    public string Date { get; set; }
}

您不能使用属性为特定 POCO 类型指定索引名称。但是,您可以使用 .DefaultMappingFor<T>ConnectionSettings 上指定它,其中 T 是您的 POCO 类型。

当使用 BulkAll 时,您可以使用 BufferToBulk(...)

为每个批量操作指定一个索引名称
private static void Main()
{
    var defaultIndex = "my-index";
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

    var settings = new ConnectionSettings(pool)
        .DefaultIndex(defaultIndex);

    var client = new ElasticClient(settings);

    var bulkAll = client.BulkAll(MyDocuments(), b => b
        .Index(null)
        .Type(null)
        .BufferToBulk((bu, docs) =>
        {
            foreach (var doc in docs)
            {
                bu.Index<MyDocument>(bi => bi
                    .Index(doc.Id % 2 == 0 ? "even-index" : "odd-index")
                    .Document(doc)
               );
            }
        })
        .RefreshOnCompleted()
        .Size(100)
    );

    bulkAll.Wait(TimeSpan.FromMinutes(20), _ => {});
}

private static IEnumerable<MyDocument> MyDocuments()
{
    for (int i = 0; i < 1000; i++)
        yield return new MyDocument(i);
}


public class MyDocument 
{
    public MyDocument(int id)
    {
        Id = id;
        Message = $"message {id}";
    }

    public int Id { get; set; }

    public string Message { get; set; }
}