Esempio n. 1
0
        public JsonResult EpdateEsData()
        {
            string EsNodeUrl = ConfigurationManager.AppSettings["EsNodeUrl"];
            var    esHelper  = EsBaseHelper.CreateEsHelper(EsNodeUrl); //查询

            esHelper.DefaultIndex = EsConst.defaultEsFileIndex;
            esHelper.UpdateByQuery();
            return(Json(new { }));
        }
Esempio n. 2
0
        public JsonResult GetList(QueryBuilder qb)
        {
            var pi         = qb.PageIndex;
            var ps         = qb.PageSize;
            var qbItem     = qb.Items.FirstOrDefault(a => a.Field == "QueryText");
            var queryValue = string.Empty;
            var spaceID    = string.Empty;

            if (qbItem != null)
            {
                queryValue = qbItem.Value.ToString();
            }
            qbItem = qb.Items.FirstOrDefault(a => a.Field == "SpaceID");
            if (qbItem != null)
            {
                spaceID = qbItem.Value.ToString();
            }
            var dataList = new List <Dictionary <string, object> >();

            var esHelper = EsBaseHelper.CreateEsHelper(EsNodeUrl); //查询

            esHelper.DefaultIndex = EsConst.defaultEsFileIndex;
            var queryResult = esHelper.QueryDocument(queryValue, spaceID, pi, ps);//查询结果
            var hitsList    = queryResult.Hits;

            foreach (var item in hitsList)
            {
                var dic       = new Dictionary <string, object>();
                var hitSource = item.Source;
                if (hitSource != null)
                {
                    dic = FormulaHelper.ModelToDic(hitSource);
                }
                //获得高亮数据
                var    content     = string.Empty; //文档内容
                string title       = string.Empty; //标题
                string propertyStr = string.Empty; //属性
                if (item.Highlight.Count > 0)
                {
                    foreach (var highlight in item.Highlight)
                    {
                        if (highlight.Key == "title")
                        {
                            title += string.Join("", highlight.Value.ToArray());
                        }
                        else if (highlight.Key == "content")
                        {
                            content += string.Join(" ", highlight.Value.ToArray()).Replace("\r\n", "").Replace("\r", "").Replace("\n", "");
                        }
                        else if (highlight.Key == "propertyJson")
                        {
                            propertyStr += string.Join("", highlight.Value.ToArray());
                        }
                    }
                }

                if (string.IsNullOrEmpty(title) && hitSource != null)
                {
                    title = hitSource.Title;
                }
                if (string.IsNullOrEmpty(propertyStr) && hitSource != null)
                {
                    propertyStr = hitSource.PropertyJson;
                }
                dic.SetValue("title", title);
                dic.SetValue("propertyStr", propertyStr);
                dic.SetValue("content", content);
                dataList.Add(dic);
            }
            var gridData = new GridData(dataList);
            var total    = 0;

            if (queryResult.Total != null)
            {
                total = Convert.ToInt32(queryResult.Total.Value);
            }
            gridData.total = total;
            return(Json(gridData));
        }
Esempio n. 3
0
        public void Convert()
        {
            #region 创建esHelper、configHelper

            var esUrl = ConfigurationManager.AppSettings["EsUrl"];
            if (string.IsNullOrEmpty(esUrl))
            {
                LogWriter.Error(string.Format("文字提取程序异常:{0},错误:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "配置文件缺少EsUrl"));
                return;
            }
            var esHelper = EsBaseHelper.CreateEsHelper(esUrl);
            try
            {
                if (!esHelper.ExistsIndex(EsConst.defaultEsFileIndex))
                {
                    esHelper.CreateIndex <EsFile>(EsConst.defaultEsFileIndex);//创建es索引
                }
            }
            catch (Exception ex)
            {
                LogWriter.Error(ex, string.Format("文字提取程序异常:{0},错误:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message));
                return;
            }
            esHelper.DefaultIndex = EsConst.defaultEsFileIndex;//设置es默认索引

            SQLHelper configHelper = SQLHelper.CreateSqlHelper("DocConfigCntString");

            #endregion

            string spaceSql = "select * from dbo.S_DOC_Space ";
            var    spaceDt  = configHelper.ExecuteDataTable(spaceSql);

            string nodeConfigSQL = @"select NodeID ConfigID,SpaceID,AttrField Field,DataType,InputType,EnumKey,FulltextProp,AttrSort from S_DOC_NodeAttr
                                        where FulltextProp='True' 
                                        union
                                        select FileID ConfigID,SpaceID,FileAttrField Field,DataType,InputType,EnumKey,FulltextProp,AttrSort from S_DOC_FileAttr
                                        where FulltextProp='True' 
                                        order by AttrSort ";
            var    propFieldDt   = configHelper.ExecuteDataTable(nodeConfigSQL);
            var    enumFieldDt   = propFieldDt.Select("EnumKey is not null");
            var    enumDic       = new Dictionary <string, DataTable>();
            var    enumService   = Formula.FormulaHelper.GetService <Formula.IEnumService>();
            foreach (var item in enumFieldDt)
            {
                var enumKey = item["EnumKey"].ToString();
                if (enumDic.ContainsKey(enumKey))
                {
                    continue;
                }
                var enumDt = enumService.GetEnumTable(enumKey);
                enumDic.Add(enumKey, enumDt);
            }
            foreach (DataRow space in spaceDt.Rows)
            {
                try
                {
                    string constr = String.Format(conStrTemplate, space["Server"].ToString()
                                                  , space["UserName"].ToString(), space["Pwd"].ToString(), space["DbName"].ToString());
                    SQLHelper sqlHepler = new SQLHelper(constr);
                    string    sql       = @"select S_Attachment.*,S_FileInfo.ConfigID from S_Attachment 
left join S_FileInfo on S_FileInfo.ID = S_Attachment.FileID
where S_Attachment.State='Normal' and CurrentVersion='True' and S_FileInfo.State='Published'
and ((MainFile is not null and MainFile!='' ) or  (PDFFile is not null and PDFFile!='' ))
order by ID";
                    DataTable dt        = sqlHepler.ExecuteDataTable(sql);
                    var       SpaceID   = space["ID"].ToString();
                    int       i         = 1;
                    foreach (DataRow attItem in dt.Rows)
                    {
                        string logSql   = string.Empty;
                        var    Id       = SQLHelper.CreateGuid();
                        string mainFile = string.Empty;
                        if (attItem["PDFFile"] != DBNull.Value && attItem["PDFFile"] != null && !string.IsNullOrEmpty(attItem["PDFFile"].ToString()))
                        {
                            mainFile = attItem["PDFFile"].ToString();
                        }
                        if (string.IsNullOrEmpty(mainFile))
                        {
                            if (attItem["MainFile"] != DBNull.Value && attItem["MainFile"] != null && !string.IsNullOrEmpty(attItem["MainFile"].ToString()))
                            {
                                mainFile = attItem["MainFile"].ToString();
                            }
                        }
                        var    FileID       = attItem["FileID"].ToString();
                        var    NodeID       = attItem["NodeID"].ToString();
                        var    ConfigID     = attItem["ConfigID"].ToString();
                        var    AttrID       = attItem["ID"].ToString();
                        string FormatLogSql = @"INSERT INTO S_DOC_FulltextSearchConvertLog
                                                            ([ID],[FsFileID],[AttrID] ,[FileID] ,[NodeID] ,[SpaceID] ,[CreateDate] ,[ConvertState],[ErrorMeesage])
                                                            VALUES ('" + Id + "' ,'" + mainFile.Replace("'", "''") + "','" + AttrID + "','" + FileID + "' ,'" + NodeID + "' ,'" + SpaceID + "' ,'" + DateTime.Now + "','{0}','{1}')";
                        string updateSql    = "update S_Attachment Set State='Finish' where ID='" + attItem["ID"].ToString() + "'";
                        Console.WriteLine("文件信息:" + mainFile + " " + DateTime.Now.ToString());
                        var ext = GetFileExt(mainFile).ToLower();
                        try
                        {
                            string content = string.Empty;
                            //string fullPath = service.GetFileFullPath(mainFile);
                            var file = FileStoreHelper.GetFile(mainFile);
                            //Console.WriteLine("文件路径:" + fullPath);

                            #region 提取文字

                            switch (ext)
                            {
                            case "docx":
                            case "doc": content = ExtractHelper.GetWordText(file); break;

                            case "xls":
                            case "xlsx": content = ExtractHelper.GetExcelText(file); break;

                            case "pdf": content = ExtractHelper.GetPdfText_Itextsharp(file); break;

                            case "txt": content = ExtractHelper.GetTxtText(file); break;

                            default:
                            {
                                Console.WriteLine(ext + "文件跳过");
                                sqlHepler.ExecuteNonQuery(updateSql);
                                Console.Write(ext + " 格式不对跳过" + i.ToString() + "/" + dt.Rows.Count);
                                i++;
                                continue;
                            }
                            }
                            Console.WriteLine("获取信息内容完成");
                            #endregion
                            #region 属性json、全路径json
                            var fileDt = sqlHepler.ExecuteDataTable(@"select * from S_FileInfo where id='" + FileID + "'");
                            if (fileDt.Rows.Count == 0)
                            {
                                throw new Exception(string.Format("没有找到ID为【{0}】的S_FileInfo的记录", FileID));
                            }
                            var nodeFullID = fileDt.Rows[0]["FullNodeID"].ToString();
                            var nodeDt     = sqlHepler.ExecuteDataTable(@"select * from S_NodeInfo where id in ('" + nodeFullID.Replace(".", "','") + "')");
                            nodeDt.PrimaryKey = new DataColumn[] { nodeDt.Columns["ID"] };

                            string propertyJson = string.Empty; //属性,空格分隔的string,暂时不存Json
                            string nodePathJson = string.Empty; //全路径Json
                            var    nodePathList = new List <Dictionary <string, string> >();
                            nodePathList.Add(new Dictionary <string, string>()
                            {
                                { "id", SpaceID }, { "name", space["Name"].ToString() }, { "type", "space" }
                            });

                            foreach (var nid in nodeFullID.Split('.'))
                            {
                                var nodeRow = nodeDt.Rows.Find(nid);
                                if (nodeRow == null)
                                {
                                    continue;
                                }
                                //目录属性
                                var propString = GetPropStrings(propFieldDt, nodeRow, enumDic);
                                propertyJson += propString;

                                //全路径
                                string nname = nodeRow["Name"].ToString();
                                nodePathList.Add(new Dictionary <string, string>()
                                {
                                    { "id", nid }, { "name", nname }, { "type", "node" }
                                });
                            }
                            //文件节点目录
                            nodePathList.Add(new Dictionary <string, string>()
                            {
                                { "id", SpaceID }, { "name", fileDt.Rows[0]["Name"].ToString() }, { "type", "file" }
                            });
                            nodePathJson = JsonHelper.ToJson(nodePathList);
                            //文件属性
                            var filePropString = GetPropStrings(propFieldDt, fileDt.Rows[0], enumDic);
                            propertyJson += filePropString;
                            propertyJson  = propertyJson.TrimEnd();
                            #endregion
                            #region 插入Es

                            var esFile = new EsFile();
                            esFile.Id       = FileID;
                            esFile.SpaceID  = SpaceID;
                            esFile.NodeID   = NodeID;
                            esFile.FileID   = FileID;
                            esFile.AttrID   = AttrID;
                            esFile.ConfigID = ConfigID;
                            if (!string.IsNullOrEmpty(mainFile))
                            {
                                esFile.FsFileID = System.Convert.ToInt32(mainFile.Split('_')[0]);
                            }
                            esFile.Title        = GetFileName(mainFile);
                            esFile.Content      = content;
                            esFile.PropertyJson = propertyJson;
                            esFile.FullPathJson = nodePathJson;
                            if (attItem["CreateDate"] != null && attItem["CreateDate"] != DBNull.Value)
                            {
                                esFile.FileCreateDate = System.Convert.ToDateTime(attItem["CreateDate"]);
                            }
                            else
                            {
                                esFile.FileCreateDate = DateTime.Now; //归档日期
                            }
                            if (attItem["CreateUserName"] != null && attItem["CreateUserName"] != DBNull.Value)
                            {
                                esFile.FileCreateUser = attItem["CreateUserName"].ToString(); //归档人
                            }
                            esFile.SecretLevel = string.Empty;                                //密级
                            esHelper.AddDocument(esFile);
                            Console.WriteLine("更新Es数据完成");
                            #endregion

                            sqlHepler.ExecuteNonQuery(updateSql);
                            logSql = String.Format(FormatLogSql, "Success", "");
                            configHelper.ExecuteNonQuery(logSql);
                            Console.Write(" 成功" + i.ToString() + "/" + dt.Rows.Count);
                            i++;
                        }
                        catch (Exception ex)
                        {
                            logSql = String.Format(FormatLogSql, "Error", ex.Message);
                            configHelper.ExecuteNonQuery(logSql);
                            LogWriter.Error(ex, string.Format("文字提取程序异常:{0},错误:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message));
                            Console.WriteLine("失败跳过" + i.ToString() + "/" + dt.Rows.Count);
                            i++;
                            continue;
                        }
                    }
                }
                catch (Exception exp)
                {
                    LogWriter.Error(exp, string.Format("文字提取程序异常:{0},错误:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), exp.Message));

                    Console.WriteLine(exp.InnerException);
                    continue;
                }
            }
        }