/// <summary> /// 创建指定时间索引 /// </summary> /// <param name="setting">ElasticSearch设置</param> private void IndexCreateAndMapping(ElasticSearchSetting setting) { var esMappingSettings = new EsCreateIndexSettings() { Setting = setting, NumberOfShards = NumberOfShards, AliasIndex = AliasIndex }; EsClientProvider.CreateIndex(esMappingSettings, EntityMapping); }
/// <summary> /// 初始化 /// </summary> /// <param name="setting">Es配置信息</param> internal static ElasticClient Init(ElasticSearchSetting setting) { try { var settings = GetSettings(setting); return(new ElasticClient(settings)); } catch (Exception ex) { throw new Exception($"EsClientProvider.Register:{ex.Message}"); } }
/// <summary> /// 获取客户端 /// </summary> /// <param name="setting">Es配置信息</param> /// <returns></returns> internal static ElasticClient GetClient(ElasticSearchSetting setting) { if (!ClientDictionary.ContainsKey(setting.EsHttpAddress)) { var currentIndexClientDictionary = new ConcurrentDictionary <string, ElasticClient>(); ClientDictionary.TryAdd(setting.EsHttpAddress, currentIndexClientDictionary); } if (ClientDictionary[setting.EsHttpAddress].ContainsKey(setting.EsDefaultIndex)) { return(ClientDictionary[setting.EsHttpAddress][setting.EsDefaultIndex]); } var client = Init(setting); ClientDictionary[setting.EsHttpAddress].TryAdd(setting.EsDefaultIndex, client); return(client); }
/// <summary> /// 获取Es链接设置 /// </summary> /// <returns></returns> private static ConnectionSettings GetSettings(ElasticSearchSetting setting) { var urls = setting.EsHttpAddress.Split(';').Select(s => new Uri(s)); //链接池 var pool = new StaticConnectionPool(urls); var settings = new ConnectionSettings(pool).DefaultIndex(setting.EsDefaultIndex); if (!string.IsNullOrEmpty(setting.UserName) && !string.IsNullOrEmpty(setting.Password)) { settings.BasicAuthentication(setting.UserName, setting.Password); } //网络代理 if (!string.IsNullOrEmpty(setting.EsNetworkProxy)) { settings.Proxy(new Uri(setting.EsNetworkProxy), "", ""); } //连接数限制 if (setting.EsConnectionLimit > 0) { settings.ConnectionLimit(setting.EsConnectionLimit); } return(settings); }
public ElasticSearchProvider() { _elasticSearchSetting = ElasticSearchSetting.Instance; }
/// <summary> /// Es客户端 /// </summary> /// <param name="index">索引名称</param> public ElasticClient EsClientByIndex(string index = "") { if (CurrSetting == null) { if (Setting == null) { if (ElasticSearchConfig.ElasticSearchSetting == null || ElasticSearchConfig.ElasticSearchSetting.EsHttpAddress == null) { throw new Exception("esHttpAddress cannot be empty"); } CurrSetting = new ElasticSearchSetting() { EsHttpAddress = ElasticSearchConfig.ElasticSearchSetting.EsHttpAddress, UserName = ElasticSearchConfig.ElasticSearchSetting.UserName, Password = ElasticSearchConfig.ElasticSearchSetting.Password, EsDefaultIndex = ElasticSearchConfig.ElasticSearchSetting.EsDefaultIndex, EsNetworkProxy = ElasticSearchConfig.ElasticSearchSetting.EsNetworkProxy, EsConnectionLimit = ElasticSearchConfig.ElasticSearchSetting.EsConnectionLimit }; } else { CurrSetting = new ElasticSearchSetting() { EsHttpAddress = Setting.EsHttpAddress, UserName = Setting.UserName, Password = Setting.Password, EsDefaultIndex = Setting.EsDefaultIndex, EsNetworkProxy = Setting.EsNetworkProxy, EsConnectionLimit = Setting.EsConnectionLimit }; } } if (!string.IsNullOrWhiteSpace(index) && index != CurrentIndex) { //传参进来的索引 CurrSetting.EsDefaultIndex = index; var currClient = GetClient(CurrSetting); //索引是否已映射 if (EsClientProvider.MappingDictionary.ContainsKey(CurrSetting.EsDefaultIndex)) { return(currClient); } //判断索引是否存在 var exists = currClient.Indices.Exists(CurrSetting.EsDefaultIndex).Exists; if (!exists) { throw new Exception($"Index:{CurrSetting.EsDefaultIndex} does not exist"); } RunEntityMapping(currClient, CurrSetting.EsDefaultIndex); return(currClient); } else { //程序创建的索引 CurrSetting.EsDefaultIndex = CurrentIndex; var currClient = GetClient(CurrSetting); //索引是否已映射 if (EsClientProvider.MappingDictionary.ContainsKey(CurrSetting.EsDefaultIndex)) { return(currClient); } //判断索引是否存在 var exists = currClient.Indices.Exists(CurrSetting.EsDefaultIndex).Exists; //索引存在 if (exists) { RunEntityMapping(currClient, CurrSetting.EsDefaultIndex); return(currClient); } //索引不存在 var aliasIndex = AliasIndex; if (string.IsNullOrEmpty(AliasIndex)) { aliasIndex = CurrSetting.EsDefaultIndex; } IIndexState indexState = new IndexState() { Settings = new IndexSettings() { NumberOfReplicas = 0, NumberOfShards = NumberOfShards } }; //按别名创建索引 if (!string.IsNullOrEmpty(aliasIndex) && !aliasIndex.Equals(CurrSetting.EsDefaultIndex)) { currClient.Indices.Create(CurrSetting.EsDefaultIndex, c => c.InitializeUsing(indexState).Aliases(a => a.Alias(aliasIndex))); } else { currClient.Indices.Create(CurrSetting.EsDefaultIndex, c => c.InitializeUsing(indexState)); } RunEntityMapping(currClient, CurrSetting.EsDefaultIndex); return(currClient); } }