Пример #1
0
        /// <summary>
        /// 新增一条数据的索引
        /// </summary>
        /// <param name="jobEntity"></param>
        public void InsertIndex(Bpo_JobEntity jobEntity, string rootPath)
        {
            if (jobEntity == null)
            {
                return;
            }

            System.IO.DirectoryInfo footDirInfo = System.IO.Directory.CreateDirectory(rootPath);

            // bool isCreate = footDirInfo.GetFiles().Count() == 0;//下面没有文件则为新建索引

            FSDirectory directory = FSDirectory.Open(footDirInfo);

            // using (IndexWriter writer = new IndexWriter(directory, CreateAnalyzerWrapper(), isCreate, IndexWriter.MaxFieldLength.LIMITED))
            using (IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED))
            {
                writer.MergeFactor     = 2;    //控制多个segment合并的频率,默认10
                writer.UseCompoundFile = true; //创建符合文件 减少索引文件数量

                Document document = getDocument(jobEntity);
                writer.AddDocument(document);

                //writer.Optimize();
            }
        }
Пример #2
0
        /// <summary>
        /// 删除一条数据的索引
        /// </summary>
        /// <param name="jobId"></param>
        /// <returns></returns>
        public int DeleteIndex(int jobId)
        {
            Bpo_JobEntity jobEntity = DataRepository.GetJobById(jobId);

            if (jobEntity == null)
            {
                return(0);
            }

            LuceneBuild luceneBuild = new LuceneBuild();

            luceneBuild.DeleteIndex <Bpo_JobEntity>(jobEntity, "Id", path);
            return(1);
        }
Пример #3
0
        /// <summary>
        /// 新增一条数据的索引
        /// </summary>
        /// <param name="jobId"></param>
        /// <returns></returns>
        public int InsertIndex(int jobId)
        {
            Bpo_JobEntity jobEntity = DataRepository.GetJobById(jobId);

            if (jobEntity == null)
            {
                return(0);
            }

            LuceneBuild luceneBuild = new LuceneBuild();

            luceneBuild.InsertIndex(jobEntity, path);
            return(1);
        }
Пример #4
0
        /// <summary>
        /// 更新一条数据的索引
        /// </summary>
        /// <param name="jobId"></param>
        /// <returns></returns>
        public int UpdateIndex(int jobId)
        {
            Bpo_JobEntity jobEntity = DataRepository.GetJobById(jobId);

            if (jobEntity == null)
            {
                return(0);
            }
            jobEntity.UserName = "******";

            LuceneBuild luceneBuild = new LuceneBuild();

            luceneBuild.UpdateIndex <Bpo_JobEntity>(jobEntity, "Id", path);
            return(1);
        }
Пример #5
0
        private Document getDocument(Bpo_JobEntity jobEntity)
        {
            Document document = new Document();//一条数据

            //一个字段,列名,值,是否保存值,是否分词
            //Field.Store.NO 代表不存值,这样就不会生产索引,取值时为null
            //document.Add(new NumericField("Id", Field.Store.YES, true).SetIntValue(item.Id)); //存储为NumericField,可以根据数据进行搜索
            document.Add(new Field("Id", jobEntity.Id.ToString(), Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("Title", jobEntity.Title ?? "".ToString(), Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new NumericField("UserId", Field.Store.YES, true).SetIntValue(jobEntity.UserId));
            document.Add(new Field("UserName", jobEntity.UserName ?? "".ToString(), Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new NumericField("CompanyId", Field.Store.YES, true).SetIntValue(jobEntity.CompanyId));
            document.Add(new Field("CompanyName", jobEntity.CompanyName ?? "".ToString(), Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("FullAddress", jobEntity.FullAddress ?? "".ToString(), Field.Store.YES, Field.Index.ANALYZED));
            // document.Add(new NumericField("CreateTime", Field.Store.YES, true).SetIntValue(int.Parse(jobEntity.CreateTime.ToString("yyyyMMdd"))));
            document.Add(new Field("CreateDate", jobEntity.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), Field.Store.YES, Field.Index.NOT_ANALYZED));

            return(document);
        }
Пример #6
0
        /// <summary>
        /// 更新一条数据的索引
        /// </summary>
        /// <param name="ci"></param>
        public void UpdateIndex(Bpo_JobEntity job, string rootIndexPath)
        {
            if (job == null)
            {
                return;
            }
            System.IO.DirectoryInfo dirInfo = System.IO.Directory.CreateDirectory(rootIndexPath);

            bool isCreate = dirInfo.GetFiles().Count() == 0;//下面没有文件则为新建索引

            FSDirectory directory = FSDirectory.Open(dirInfo);

            using (IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer() /*CreateAnalyzerWrapper()*/, isCreate, IndexWriter.MaxFieldLength.LIMITED))
            {
                writer.MergeFactor     = 100;  //控制多个segment合并的频率,默认10
                writer.UseCompoundFile = true; //创建符合文件 减少索引文件数量

                Document document = getDocument(job);
                writer.UpdateDocument(new Term("Id", job.Id.ToString()), document);//注意:Id生成索引时要用Field,而不能是NumericField
            }
        }
Пример #7
0
        /// <summary>
        /// 删除指定的索引
        /// </summary>
        /// <param name="ci"></param>
        public void DeleteIndex(Bpo_JobEntity jobEntity, string rootIndexPath)
        {
            if (jobEntity == null)
            {
                return;
            }
            //Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            System.IO.DirectoryInfo dirInfo   = System.IO.Directory.CreateDirectory(rootIndexPath);
            FSDirectory             directory = FSDirectory.Open(dirInfo);

            //using (IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED))
            //{
            using (IndexReader reader = IndexReader.Open(directory, false))
            {
                reader.DeleteDocuments(new Term("Id", jobEntity.Id.ToString()));

                //writer.Commit();
                //writer.Optimize();
            }
        }