从数据库中检索数据并对它们进行批量索引 - Sql Server

时间:2016-05-03 08:11:07

标签: .net elasticsearch nest

我在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);

除了描述符之外,还有其他方法可以有效地索引数千个文档吗?

提前致谢

1 个答案:

答案 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