/// <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(); } }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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 } }
/// <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(); } }