Example #1
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="doc"></param>
        /// <returns></returns>
        public bool SubmitForm(KnowledgeInfoEntity entity, string keyValue)
        {
            if (!string.IsNullOrEmpty(keyValue))
            {
                //修改
                entity.knowledgeGUID = keyValue;
                entity.UpdateDate    = DateTime.Now;
                _knowledgeRepository.Update(entity);

                #region 创建索引
                //创建索引
                var       updateEntity = _knowledgeRepository.FindEntity(keyValue);
                IndexData indexData    = new IndexData();
                indexData.JobType = JobType.Up;
                indexData.Data    = updateEntity;
                var indexManage = IndexManager.GetInstance();
                indexManage.AddJobs(indexData);
                #endregion

                return(true);
            }
            else
            {
                entity.CreateById    = OperatorProvider.Provider.Current().UserId;
                entity.CreateBy      = OperatorProvider.Provider.Current().UserName;
                entity.CreateDate    = DateTime.Now;
                entity.UpdateDate    = DateTime.Now;
                entity.knowledgeGUID = Guid.NewGuid().ToString();
                entity.ViewCount     = 1;
                #region 创建索引
                //创建索引
                IndexData indexData = new IndexData();
                indexData.JobType = JobType.New;
                indexData.Data    = entity;
                var indexManage = IndexManager.GetInstance();
                indexManage.AddJobs(indexData);
                #endregion
                return(_knowledgeRepository.Insert(entity));
            }
        }
Example #2
0
        /// <summary>
        /// 处理实际数据
        /// </summary>
        /// <param name="writer"></param>
        private void ProcessJobs()
        {
            Regex r = new Regex("<img.[^>]+[>]+", RegexOptions.ExplicitCapture);
            KnowledgeInfoEntity dataManager = new KnowledgeInfoEntity();

            while (jobs.Count != 0)
            {
                IndexData job      = jobs.Dequeue();
                string    IndexDic = __SearchAppIndexPath;
                //创建索引目录
                if (!System.IO.Directory.Exists(IndexDic))
                {
                    System.IO.Directory.CreateDirectory(IndexDic);
                }
                FSDirectory directory = FSDirectory.Open(new DirectoryInfo(IndexDic), new NativeFSLockFactory());
                bool        isUpdate  = IndexReader.IndexExists(directory);
                //logger.Debug("索引库存在状态" + isUpdate);
                if (isUpdate)
                {
                    //如果索引目录被锁定(比如索引过程中程序异常退出),则首先解锁
                    if (IndexWriter.IsLocked(directory))
                    {
                        //logger.Debug("开始解锁索引库");
                        IndexWriter.Unlock(directory);
                        //logger.Debug("解锁索引库完成");
                    }
                }
                IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), !isUpdate, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);


                writer.DeleteDocuments(new Term("knowledgeGUID", job.Data.knowledgeGUID.ToString()));
                //如果是“添加任务”再添加,
                if (job.JobType == JobType.Up || job.JobType == JobType.New)
                {
                    KnowledgeInfoEntity data = job.Data;
                    /*去除为NULL数据*/
                    if (string.IsNullOrEmpty(data.Title))
                    {
                        data.Title = string.Empty;
                    }
                    if (string.IsNullOrEmpty(data.ContentNoHtml))
                    {
                        data.ContentNoHtml = string.Empty;
                    }
                    if (string.IsNullOrEmpty(data.Summary))
                    {
                        data.Summary = string.Empty;
                    }
                    if (string.IsNullOrEmpty(data.CreateBy))
                    {
                        data.CreateBy = string.Empty;
                    }

                    Document document = new Document();
                    document.Add(new Field("knowledgeGUID", data.knowledgeGUID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                    document.Add(new Field("Title", data.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    document.Add(new Field("ContentNoHtml", r.Replace(data.ContentNoHtml, ""), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    document.Add(new Field("Summary", data.Summary, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    document.Add(new Field("CreateBy", data.CreateBy, Field.Store.YES, Field.Index.NOT_ANALYZED));
                    document.Add(new Field("UpdateDate", data.UpdateDate.Value.ToString("yyyy-MM-dd"), Field.Store.YES, Field.Index.NOT_ANALYZED));
                    document.Add(new Field("ViewCount", data.ViewCount.ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    document.Add(new Field("DataType", data.DataType, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
                    writer.AddDocument(document);
                    //logger.Debug("索引" + job.Data.DataGUID.ToString() + "完毕");
                }
                writer.Close();
                directory.Close();//不要忘了Close,否则索引结果搜不到
            }
        }
Example #3
0
        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="startRowIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalCount"></param>
        /// <returns></returns>
        public List <KnowledgeInfoEntity> ShowDatas(SearchParam SearchParam, string[] JS_Fields)
        {
            List <KnowledgeInfoEntity> listData = new List <KnowledgeInfoEntity>();

            FSDirectory directory = FSDirectory.Open(new DirectoryInfo(__SearchAppIndexPath), new NoLockFactory());

            IndexReader reader = IndexReader.Open(directory, true);
            //IndexSearcher是进行搜索的类
            IndexSearcher searcher = new IndexSearcher(reader);
            BooleanQuery  bQuery   = new BooleanQuery();


            //被""包裹,不进行分词处理
            if (SearchParam.KeyValue.Length > 2 &&
                SearchParam.KeyValue.IndexOf("\"") == 0 &&
                SearchParam.KeyValue.LastIndexOf("\"") == SearchParam.KeyValue.Length - 1)
            {
                SearchParam.KeyValue = SearchParam.KeyValue.Substring(1, SearchParam.KeyValue.Length - 2);
            }
            else
            {
                SearchParam.KeyValue = ReplaceChar(SearchParam.KeyValue);
                ////分词
                SearchParam.KeyValue = GetKeyWordsSplitBySpace(SearchParam.KeyValue);
            }
            if (string.IsNullOrEmpty(SearchParam.KeyValue))
            {
                return(listData);
            }

            QueryParser parse;
            Query       query;

            foreach (string strField in JS_Fields)
            {
                //创建标题索引搜索
                parse = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, strField, new PanGuAnalyzer());
                query = parse.Parse(SearchParam.KeyValue);
                parse.SetDefaultOperator(QueryParser.Operator.AND);
                bQuery.Add(query, BooleanClause.Occur.SHOULD);
            }

            TopScoreDocCollector collector = TopScoreDocCollector.create(__SearchAppResultMaxLength, true);
            //Sort sort = new Sort(new SortField("Addtime", SortField.DOC, true));
            Filter filter = null;

            if (!string.IsNullOrEmpty(SearchParam.DataType))
            {
                filter = new TermRangeFilter("DataType", SearchParam.DataType, SearchParam.DataType, true, true);
            }
            searcher.Search(bQuery, filter, collector);


            SearchParam.TotalCount = collector.GetTotalHits();//返回总条数
            //分页,下标从0开始,0是第一条记录
            ScoreDoc[] docs = collector.TopDocs((SearchParam.PageIndex - 1) * SearchParam.PageSize, SearchParam.PageSize).scoreDocs;


            for (int i = 0; i < docs.Length; i++)
            {
                //取文档的编号,这个是主键,lucene.net分配
                int docID = docs[i].doc;
                //检索结果中只有文档的id,如果要取Document,则需要Doc再去取
                //降低内容占用
                Document doc = searcher.Doc(docID);

                string content = doc.Get("ContentNoHtml");
                if (content.Length > 200)
                {
                    content = content.Substring(0, 199) + "……";
                }

                KnowledgeInfoEntity itemData = new KnowledgeInfoEntity()
                {
                    knowledgeGUID = new Guid(doc.Get("knowledgeGUID")).ToString(),
                    Title         = doc.Get("Title"),
                    Summary       = doc.Get("Summary"),
                    ContentNoHtml = content,
                    ContentHtml   = doc.Get("ContentHtml"),
                    CreateBy      = doc.Get("CreateBy"),
                    UpdateDate    = DateTime.Parse(doc.Get("UpdateDate")),
                    ViewCount     = int.Parse(doc.Get("ViewCount")),
                    DataType      = doc.Get("DataType"),
                };
                //高亮
                itemData.Title         = Preview(itemData.Title, SearchParam.KeyValue);
                itemData.ContentNoHtml = Preview(itemData.ContentNoHtml, SearchParam.KeyValue);
                itemData.Summary       = Preview(itemData.Summary, SearchParam.KeyValue);
                listData.Add(itemData);
            }
            return(listData);
        }
        public ActionResult SubmitForm(KnowledgeInfoEntity entity, string keyValue)
        {
            var data = _app.SubmitForm(entity, keyValue);

            return(Success("提交成功"));
        }