Как указать имя индекса с помощью атрибута, используя NEST для библиотеки ElasticSearch? - PullRequest
0 голосов
/ 12 октября 2018

Как я могу указать имя индекса, используя атрибут, используя NEST для ElasticSearch?

Вот класс POCO, который я использовал:

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

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

1 Ответ

0 голосов
/ 12 октября 2018

Вы не можете указать имена индекса для определенного типа POCO, используя атрибуты.Однако вы можете указать его на ConnectionSettings, используя .DefaultMappingFor<T>, где T - ваш тип POCO.

При использовании BulkAll вы можете указать имя индекса для массовой операции, используя BufferToBulk(...)* 1008.*

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; }
}
...