我在SQL Server管理工作室中有一些记录,我想将它们索引到我的ES索引。 目前我单独索引它们需要很长时间。我想批量索引它们。我尝试使用批量描述符,它抛出错误说>要索引的对象,如果没有手动设置id,它将从对象
中推断出来下面是我的代码。
string connectionString = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
using (cn = new SqlConnection(connectionString))
{
cmd = new SqlCommand();
cmd.CommandText = ConfigurationManager.AppSettings["dbName"];
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = cn;
cn.Open();
//to index the students response into the ES
try
{
client = ConfigSettings.connection();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
throw;
}
reader = cmd.ExecuteReader();
while (reader.Read())
{
var descriptor = new BulkDescriptor();
descriptor.Index<Class1>(b=>b.Document(new Class1
{
Id = Int32.Parse(reader[0].ToString()),
Title = reader[1].ToString(),
BodyContent = reader[2].ToString()
}, z => z.Refresh()));
}
Client.Bulk(descriptor);
客户端设置
configvalue1 = ConfigurationManager.AppSettings["url"];
var pool = new SingleNodeConnectionPool(new Uri(configvalue1));
var defaultIndex = "dbtrial";
settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex)
.MapDefaultTypeNames(m => m.Add(typeof(Class1), "records"))
client = new ElasticClient(settings);
client.createIndex(defaultIndex);
除了描述符之外,还有其他方法可以有效地索引数千个文档吗?
提前致谢
答案 0 :(得分:0)
我尝试了类似这样的东西并且它可以正常工作(索引1000个文件需要3300ms到4500ms。所以我不确定这是否可以使用任何其他方法进一步减少)。如果有数百万条记录,我不确定性能。
List<Class1> feedlist = new List<Class1>();
reader = cmd.ExecuteReader();
while (reader.Read())
{
class1 c = new Class1
{
Id = Int32.Parse(reader[0].ToString()),
Title = reader[1].ToString(),
BodyContent = reader[2].ToString()
};
feedlist.Add(c);
}
client.IndexMany(feedlist, "dbtrial", "records");
可以建议任何更好的方法来索引数百万的记录。 TIA