Example #1
0
        public bool StartIndex(string indexNumber)
        {
            var entity = this.IndexManagerRepository.Queryable()
                         .Where(x => x.IsDeleted == false && x.IndexNumber == indexNumber.Trim())
                         .FirstOrDefault();

            if (entity == null)
            {
                return(false);
            }

            entity.Status       = IndexStatus.Started;
            entity.ModifiedBy   = "admin";
            entity.ModifiedTime = DateTime.Now;

            return(this.IndexManagerRepository.ModifyWithTransection(entity, () =>
            {
                var key = IndexNameHelper.GetIndexMappingName(entity.ServiceSign, entity.IndexName);
                var sizeKey = IndexNameHelper.GetIndexSizeName(entity.ServiceSign, entity.IndexName);

                if (!this.CacheClient.SetCache <int>(sizeKey, entity.Size * (entity.ExpensionNum + 1), 173000))
                {
                    throw new Exception("缓存设置失败");
                }

                if (!this.CacheClient.SetCache(key, entity.Status, 173000))
                {
                    throw new Exception("缓存设置失败");
                }
            }));
        }
Example #2
0
        public bool Expension(string indexNumber, ref string errorMsg)
        {
            var entity = this.IndexManagerRepository.Queryable()
                         .Where(x => x.IsDeleted == false && x.IndexNumber == indexNumber.Trim())
                         .FirstOrDefault();

            if (entity == null)
            {
                return(false);
            }

            if (entity.MaxExpensionNum == entity.ExpensionNum)
            {
                errorMsg = $"{entity.IndexName}已进行{entity.ExpensionNum}次扩容,已达到该索引的最大扩容次数";
                return(false);
            }

            entity.ExpensionNum += 1;
            entity.ModifiedBy    = "admin";
            entity.ModifiedTime  = DateTime.Now;

            return(this.IndexManagerRepository.ModifyWithTransection(entity, () =>
            {
                var key = IndexNameHelper.GetIndexSizeName(entity.ServiceSign, entity.IndexName);
                if (!this.CacheClient.SetCache <int>(key, entity.Size * (entity.ExpensionNum + 1), 173000))
                {
                    throw new Exception("缓存设置失败");
                }
            }));
        }
Example #3
0
        /// <summary>
        /// 批量添加数据到索引
        /// </summary>
        /// <typeparam name="T">实体模型类型</typeparam>
        /// <param name="index">索引名称</param>
        /// <param name="entites">添加的实体模型</param>
        public bool BulkIndex <T>(string indexName, params T[] entites) where T : SearchEntityBase
        {
            var indexMappingName = IndexNameHelper.GetIndexMappingName(SetupConfig.SetupConfig.ServiceSign, indexName);
            var status           = this.CacheClient.GetCache <IndexOperateStatus>(indexMappingName);

            this.IndexOperate.CkeckIndexStatus <T>(status, indexMappingName);

            var sizeKey   = IndexNameHelper.GetIndexSizeName(SetupConfig.SetupConfig.ServiceSign, indexName);
            var indexSize = this.CacheClient.GetCache <int>(sizeKey);

            if (indexSize == 0)
            {
                return(false);
            }

            var catResponse = this.Client.CatIndices(index => index.Index(indexMappingName).Bytes(Bytes.Mb));
            var record      = catResponse.Records.FirstOrDefault();

            if (record != null)
            {
                long storeSize;
                if (long.TryParse(record.StoreSize, out storeSize))
                {
                    if (storeSize >= indexSize)
                    {
                        throw new ElasticsearchException("该索引存储空间已满");
                    }

                    var response = this.Client.IndexMany(entites, indexMappingName);
                    return(response.IsValid);
                }
            }
            return(false);
        }
Example #4
0
        private void TrySyncData()
        {
            var query = this.IndexManagerRepository.Queryable().Where(x => x.IsDeleted == false).Select(x => new
            {
                ServiceSign  = x.ServiceSign,
                IndexName    = x.IndexName,
                Status       = x.Status,
                Size         = x.Size,
                ExpensionNum = x.ExpensionNum
            }).ToList();

            foreach (var indexData in query)
            {
                var indexMappingName = IndexNameHelper.GetIndexMappingName(indexData.ServiceSign, indexData.IndexName);
                this.CacheClient.SetCache(indexMappingName, indexData.Status, 173000);
                var indexMappingNameForSize = IndexNameHelper.GetIndexSizeName(indexData.ServiceSign, indexData.IndexName);
                this.CacheClient.SetCache(indexMappingNameForSize, indexData.Size * (indexData.ExpensionNum + 1), 173000);
            }
        }