如何使用 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; }
}
如何使用 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; }
}