static void Proc() { var uri = GetRandomWikiPage(); queue.Enqueue(uri); using (var dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo("..\\..\\idx"))) { using (var indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), new IndexWriter.MaxFieldLength(IndexWriter.DEFAULT_MAX_FIELD_LENGTH))) { while (true) { string page; if (queue.TryDequeue(out page)) { visited.AddOrUpdate(page, true, (p, b) => true); try { ProcessPage(page, indexWriter); } catch (Exception) { Console.WriteLine("ERROR"); } if (Console.KeyAvailable) { var x = Console.ReadKey(); if (x.Key == ConsoleKey.Spacebar) { break; } } } else { break; } } } } }
public ExamineTestSetupHelper(FakeFrameworkContext frameworkContext = null, bool isPassthrough = false) { var examineWorkingFolder = new DirectoryInfo(Path.Combine(Common.CurrentAssemblyDirectory, "Examine", Guid.NewGuid().ToString() + Thread.CurrentThread.ManagedThreadId)); if (!examineWorkingFolder.Exists) Directory.CreateDirectory(examineWorkingFolder.FullName); //clear out old folders var parentFolder = examineWorkingFolder.Parent; foreach(var f in parentFolder.GetDirectories().Where(x => x.CreationTimeUtc < DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(5)))) { try { Directory.Delete(f.FullName, true); } catch (IOException) { //ignore } } LogHelper.TraceIfEnabled<ExamineTestSetupHelper>("Index setup in folder {0}", () => examineWorkingFolder.FullName); //var disk = new Lucene.Net.Store.RAMDirectory(); var disk = new Lucene.Net.Store.SimpleFSDirectory(examineWorkingFolder); Indexer = new RebelExamineIndexer( new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), SynchronizationType.Synchronized, disk); _fakeFrameworkContext = frameworkContext ?? new FakeFrameworkContext(); Searcher = new LuceneSearcher(new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), disk); ExamineManager = new ExamineManager(new[] { Searcher }, new[] { Indexer }, Searcher); ExamineHelper = new ExamineHelper(ExamineManager, _fakeFrameworkContext, false); //false to not use cache var examineMapper = new ExamineModelMapper(ExamineHelper, _fakeFrameworkContext); _fakeFrameworkContext.SetTypeMappers(new FakeTypeMapperCollection(new AbstractMappingEngine[] { examineMapper, new FrameworkModelMapper(_fakeFrameworkContext) })); var providerMetadata = new ProviderMetadata("r-examine-unit-tester", new Uri("tester://"), true, isPassthrough); var revisionSchemaSessionFactory = new NullProviderRevisionRepositoryFactory<EntitySchema>(providerMetadata, FrameworkContext); var revisionRepositoryFactory = new RevisionRepositoryFactory(providerMetadata, FrameworkContext, ExamineHelper); //var revisionRepositoryFactory = new NullProviderRevisionSessionFactory<TypedEntity>(providerMetadata, FrameworkContext); var schemaRepositoryFactory = new SchemaRepositoryFactory(providerMetadata, revisionSchemaSessionFactory, FrameworkContext, ExamineHelper); var entityRepositoryFactory = new EntityRepositoryFactory(providerMetadata, revisionRepositoryFactory, schemaRepositoryFactory, FrameworkContext, ExamineHelper); var readUnitFactory = new ReadonlyProviderUnitFactory(entityRepositoryFactory); var unitFactory = new ProviderUnitFactory(entityRepositoryFactory); ProviderSetup = new ProviderSetup(unitFactory, providerMetadata, FrameworkContext, null, 0); ReadonlyProviderSetup = new ReadonlyProviderSetup(readUnitFactory, providerMetadata, FrameworkContext, null, 0); //ensure that the index exists Indexer.CreateIndex(true); }
private static void EnsureIndexWriterCore(bool creatingIndex) { if (!Directory.Exists(LuceneCommon.IndexDirectory)) { Directory.CreateDirectory(LuceneCommon.IndexDirectory); } var analyzer = new StandardAnalyzer(LuceneCommon.LuceneVersion); var directoryInfo = new DirectoryInfo(LuceneCommon.IndexDirectory); var directory = new Lucene.Net.Store.SimpleFSDirectory(directoryInfo); indexWriter = new IndexWriter(directory, analyzer, create: creatingIndex, mfl: IndexWriter.MaxFieldLength.UNLIMITED); }
public void TestFSDirectorySync() { System.IO.DirectoryInfo path = new System.IO.DirectoryInfo(System.IO.Path.Combine(AppSettings.Get("tempDir", ""), "testsync")); Lucene.Net.Store.Directory directory = new Lucene.Net.Store.SimpleFSDirectory(path, null); try { Lucene.Net.Store.IndexOutput io = directory.CreateOutput("syncfile"); io.Close(); directory.Sync("syncfile"); } finally { directory.Close(); Lucene.Net.Util._TestUtil.RmDir(path); } }
public void TestFSDirectorySync() { System.IO.DirectoryInfo path = new System.IO.DirectoryInfo(System.IO.Path.Combine(AppSettings.Get("tempDir", ""), "testsync")); Lucene.Net.Store.Directory directory = new Lucene.Net.Store.SimpleFSDirectory(path, null); try { Lucene.Net.Store.IndexOutput io = directory.CreateOutput("syncfile", null); io.Close(); directory.Sync("syncfile"); } finally { directory.Close(); Lucene.Net.Util._TestUtil.RmDir(path); } }
public void TestFSDirectorySync() { DirectoryInfo path = new DirectoryInfo(Path.Combine(Path.GetTempPath(), "testsync")); Lucene.Net.Store.Directory directory = new Lucene.Net.Store.SimpleFSDirectory(path, null); try { Lucene.Net.Store.IndexOutput io = directory.CreateOutput("syncfile", new Store.IOContext()); io.Dispose(); directory.Sync(new string[] { "syncfile" }); } finally { directory.Dispose(); Lucene.Net.Util.TestUtil.Rm(path); } }
public override CardDescription[] Read(string dirname, ReadProcessChangedInvoker processchanged) { if (dirname == null || dirname.Length <= 0) { return(null); } if (!Directory.Exists(dirname)) { return(null); } if (dirname[dirname.Length - 1] != '\\') { dirname += "\\"; } ArrayList cards = new ArrayList(MinCapacity); Query query = new MatchAllDocsQuery(); Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(dirname), new Lucene.Net.Store.SimpleFSLockFactory()); Searcher searcher = new IndexSearcher(dir, true); TopDocs td = searcher.Search(query, null, searcher.MaxDoc()); ScoreDoc[] docs = td.scoreDocs; int length = docs.Length; for (int i = 0; i < length; i++) { Document doc = searcher.Doc(docs[i].doc); cards.Add(ParseCard(doc)); if (processchanged != null) { processchanged.Invoke(length, i + 1); } } searcher.Close(); return((CardDescription[])cards.ToArray(typeof(CardDescription))); }
protected void deleteIndex(string path, string id) { string Indexdic_Server = IndexDic(path); IndexWriter writer = null; Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(Indexdic_Server)); try { //writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, false, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); writer = new IndexWriter(dir, PanGuAnalyzer, false, IndexWriter.MaxFieldLength.LIMITED); } catch { //writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); writer = new IndexWriter(dir, PanGuAnalyzer, true, IndexWriter.MaxFieldLength.LIMITED); } writer.DeleteDocuments(new Term("NumId", id));//删除一条索引 writer.Optimize(); writer.Close(); }
/// <summary> /// 创建索引 /// </summary> private void CreateIndex(内容基本数据 model, string indexdic) { string Indexdic_Server = IndexDic(indexdic); PanGu.Segment.Init(PanGuXmlPath); //var g = model as Go81WebApp.Models.数据模型.内容数据模型.公告; //创建索引目录 if (!Directory.Exists(Indexdic_Server)) { Directory.CreateDirectory(Indexdic_Server); } Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(Indexdic_Server)); //IndexWriter第三个参数:true指重新创建索引,false指从当前索引追加....此处为追加索引所以为false try { IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, false, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); AddIndex(writer, model.Id.ToString(), model.内容主体.标题, model.内容主体.内容, model.内容主体.发布时间.ToString()); writer.Optimize(); writer.Close(); } catch { IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); AddIndex(writer, model.Id.ToString(), model.内容主体.标题, model.内容主体.内容, model.内容主体.发布时间.ToString()); writer.Optimize(); writer.Close(); } }
/// <summary> /// 创建公告索引 /// </summary> private void GG_CreateIndex(公告 g, string indexdic) { string Indexdic_Server = IndexDic(indexdic); PanGu.Segment.Init(PanGuXmlPath); //创建索引目录 if (!Directory.Exists(Indexdic_Server)) { Directory.CreateDirectory(Indexdic_Server); } Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(Indexdic_Server)); //IndexWriter第三个参数:true指重新创建索引,false指从当前索引追加....此处为追加索引所以为false try { IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, false, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); GG_AddIndex(writer, g); writer.Optimize(); writer.Close(); } catch { IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); GG_AddIndex(writer, g); writer.Optimize(); writer.Close(); } }
private static void RebuildSiteIndex( string indexPath, IEnumerable<PageSettings> menuPages) { if (WebConfigSettings.DisableSearchIndex) { return; } // clean out index entirely using (Lucene.Net.Store.SimpleFSDirectory d = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(indexPath))) { if (IndexReader.IndexExists(d)) { using (IndexReader reader = IndexReader.Open(d, false)) { for (int i = 0; i < reader.NumDocs(); i++) { reader.DeleteDocument(i); } } } } log.Info("Rebuilding Search index."); if (IndexBuilderManager.Providers == null) { log.Info("No IndexBuilderProviders found"); return; } // forums can potentially take long time to index // and possibly even time out so index forums after everything else foreach (PageSettings pageSettings in menuPages) { foreach (IndexBuilderProvider indexBuilder in IndexBuilderManager.Providers) { if (indexBuilder.Name != "ForumThreadIndexBuilderProvider") { indexBuilder.RebuildIndex(pageSettings, indexPath); } } } log.Info("Finished indexing main features."); // now that other modules are done index forums foreach (PageSettings pageSettings in menuPages) { foreach (IndexBuilderProvider indexBuilder in IndexBuilderManager.Providers) { if (indexBuilder.Name == "ForumThreadIndexBuilderProvider") { indexBuilder.RebuildIndex(pageSettings, indexPath); } } } log.Info("Finished indexing Forums."); return; }
public ExamineTestSetupHelper(FakeFrameworkContext frameworkContext = null, bool isPassthrough = false) { var examineWorkingFolder = new DirectoryInfo(Path.Combine(Common.CurrentAssemblyDirectory, "Examine", Guid.NewGuid().ToString() + Thread.CurrentThread.ManagedThreadId)); if (!examineWorkingFolder.Exists) { Directory.CreateDirectory(examineWorkingFolder.FullName); } //clear out old folders var parentFolder = examineWorkingFolder.Parent; foreach (var f in parentFolder.GetDirectories().Where(x => x.CreationTimeUtc < DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(5)))) { try { Directory.Delete(f.FullName, true); } catch (IOException) { //ignore } } LogHelper.TraceIfEnabled <ExamineTestSetupHelper>("Index setup in folder {0}", () => examineWorkingFolder.FullName); //var disk = new Lucene.Net.Store.RAMDirectory(); var disk = new Lucene.Net.Store.SimpleFSDirectory(examineWorkingFolder); Indexer = new UmbracoExamineIndexer( new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), SynchronizationType.Synchronized, disk); _fakeFrameworkContext = frameworkContext ?? new FakeFrameworkContext(); Searcher = new LuceneSearcher(new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), disk); ExamineManager = new ExamineManager(new[] { Searcher }, new[] { Indexer }, Searcher); ExamineHelper = new ExamineHelper(ExamineManager, _fakeFrameworkContext, false); //false to not use cache var examineMapper = new ExamineModelMapper(ExamineHelper, _fakeFrameworkContext); _fakeFrameworkContext.SetTypeMappers(new FakeTypeMapperCollection(new AbstractMappingEngine[] { examineMapper, new FrameworkModelMapper(_fakeFrameworkContext) })); var providerMetadata = new ProviderMetadata("r-examine-unit-tester", new Uri("tester://"), true, isPassthrough); var revisionSchemaSessionFactory = new NullProviderRevisionRepositoryFactory <EntitySchema>(providerMetadata, FrameworkContext); var revisionRepositoryFactory = new RevisionRepositoryFactory(providerMetadata, FrameworkContext, ExamineHelper); //var revisionRepositoryFactory = new NullProviderRevisionSessionFactory<TypedEntity>(providerMetadata, FrameworkContext); var schemaRepositoryFactory = new SchemaRepositoryFactory(providerMetadata, revisionSchemaSessionFactory, FrameworkContext, ExamineHelper); var entityRepositoryFactory = new EntityRepositoryFactory(providerMetadata, revisionRepositoryFactory, schemaRepositoryFactory, FrameworkContext, ExamineHelper); var readUnitFactory = new ReadonlyProviderUnitFactory(entityRepositoryFactory); var unitFactory = new ProviderUnitFactory(entityRepositoryFactory); ProviderSetup = new ProviderSetup(unitFactory, providerMetadata, FrameworkContext, null, 0); ReadonlyProviderSetup = new ReadonlyProviderSetup(readUnitFactory, providerMetadata, FrameworkContext, null, 0); //ensure that the index exists Indexer.CreateIndex(true); }
/// <summary> /// 创建商品分类索引--用于搜索框智能提示 /// </summary> public static void CreateIndex_ProductCatalog(string catalogName, string indexdic) { string Indexdic_Server = IndexDic(indexdic); PanGu.Segment.Init(PanGuXmlPath); //创建索引目录 if (!Directory.Exists(Indexdic_Server)) { Directory.CreateDirectory(Indexdic_Server); } Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(Indexdic_Server)); //IndexWriter第三个参数:true指重新创建索引,false指从当前索引追加....此处为追加索引所以为false try { //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, false, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); AddIndex_ProductCatalog(writer, catalogName); writer.Optimize(); writer.Close(); } catch { //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); AddIndex_ProductCatalog(writer, catalogName); writer.Optimize(); writer.Close(); } }
/// <summary> /// 创建供应商索引 /// </summary> /// <param name="model"></param> /// <param name="indexdic"></param> public static void CreateIndex_gys(供应商 model, string indexdic) { string Indexdic_Server = IndexDic(indexdic); PanGu.Segment.Init(PanGuXmlPath); //创建索引目录 if (!Directory.Exists(Indexdic_Server)) { Directory.CreateDirectory(Indexdic_Server); } Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(Indexdic_Server)); //IndexWriter第三个参数:true指重新创建索引,false指从当前索引追加....此处为追加索引所以为false try { //Lucene.Net.Store.FSDirectory directory = Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo("/Lucene.Net/IndexDic/Gys"), new Lucene.Net.Store.NativeFSLockFactory()); //bool isUpdate = IndexReader.IndexExists(directory); //IndexWriter writer = new IndexWriter(directory, PanGuAnalyzer, isUpdate, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); //AddIndex_gys(writer, model); //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, false, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); AddIndex_gys(writer, model); writer.Optimize(); writer.Close(); } catch { //IndexWriter writer = new IndexWriter(Indexdic_Server, PanGuAnalyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); IndexWriter writer = new IndexWriter(dir, PanGuAnalyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); AddIndex_gys(writer, model); writer.Optimize(); writer.Close(); } //string Indexdic_Server = IndexDic(indexdic); //PanGu.Segment.Init(PanGuXmlPath); ////创建索引目录 //Lucene.Net.Store.FSDirectory directory = Lucene.Net.Store.FSDirectory.Open(new DirectoryInfo(Indexdic_Server), new Lucene.Net.Store.NativeFSLockFactory()); //bool isUpdate = IndexReader.IndexExists(directory); //IndexWriter writer = new IndexWriter(directory, PanGuAnalyzer, isUpdate, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); //AddIndex_gys(writer, model); //writer.Optimize(); //writer.Close(); }
static void Search() { using (var dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo("..\\..\\idx"))) { var searcher = new IndexSearcher(dir); Console.WriteLine(searcher.MaxDoc); var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "content", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)); while (true) { var term = Console.ReadLine(); var sw = Stopwatch.StartNew(); if (term == "") return; var query = parser.Parse(term); var col = TopScoreDocCollector.Create(10, true); searcher.Search(query, col); var hits = col.TopDocs().ScoreDocs; sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); for (int i = 0; i < hits.Length; i++) { var doc = searcher.Doc(hits[i].Doc); var name = doc.GetField("name").StringValue; var idx = doc.GetField("idx")?.StringValue; Console.WriteLine(" " + name + " " + idx); } } } }
private static void EnsureIndexWriter(bool creatingIndex) { if (!Directory.Exists(LuceneCommon.IndexDirectory)) { Directory.CreateDirectory(LuceneCommon.IndexDirectory); } if (indexWriter == null) { lock (indexLock) { if (indexWriter == null) { var analyzer = new StandardAnalyzer(LuceneCommon.LuceneVersion); var directory = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(LuceneCommon.IndexDirectory)); indexWriter = new IndexWriter(directory, analyzer, create: creatingIndex, mfl: IndexWriter.MaxFieldLength.UNLIMITED); } } } }
public virtual void Save(string dirname, CardDescription[] cards, SaveProcessChangedInvoker processchanged) { if (dirname == null || dirname.Length <= 0) { return; } if (!Directory.Exists(dirname)) { Directory.CreateDirectory(dirname); } Lucene.Net.Store.Directory dir = new Lucene.Net.Store.SimpleFSDirectory(new DirectoryInfo(dirname), new Lucene.Net.Store.SimpleFSLockFactory()); IndexWriter writer = new IndexWriter(dir, AnalyzerFactory.GetAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED); writer.SetMaxBufferedDocs(100); writer.SetMergeFactor(100); //========================================卡片种类映射表==================================== // // 通常 普通 速攻 装备 仪式 场地 反击 永续 效果 融合 同调 XYZ // 1、怪兽 0 0 3 4 5 6 7 // 2、魔法 0 0 1 2 3 4 5 // 3、陷阱 0 0 1 5 // //========================================================================================== for (int i = 0; i < cards.Length; i++) { CardDescription card = cards[i]; int ict = 0; if (card.sCardType.Length > 0) { switch (card.sCardType.Substring(card.sCardType.Length - 2, 2)) { case "怪兽": ict = 1; break; case "魔法": ict = 2; break; case "陷阱": ict = 3; break; default: ict = 4; break; } ict *= 10; switch (card.sCardType.Substring(0, 2)) { case "通常": ict += 0; break; case "普通": ict += 0; break; case "速攻": ict += 1; break; case "装备": ict += 2; break; case "仪式": ict += 3; break; case "场地": ict += 4; break; case "反击": ict += 1; break; case "永续": ict += 5; break; case "效果": ict += 4; break; case "融合": ict += 5; break; case "同调": ict += 6; break; case "XY": ict += 7; break; default: ict += 9; break; } } Document doc = new Document(); Field ID = new Field("ID", card.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED); Field name = new Field("name", card.name, Field.Store.YES, Field.Index.ANALYZED); Field name2 = new Field("name2", card.name, Field.Store.NO, Field.Index.NOT_ANALYZED); Field japName = new Field("japName", card.japName, Field.Store.YES, Field.Index.ANALYZED); Field japName2 = new Field("japName2", card.japName, Field.Store.NO, Field.Index.NOT_ANALYZED); Field enName = new Field("enName", card.enName, Field.Store.YES, Field.Index.ANALYZED); Field enName2 = new Field("enName2", card.enName, Field.Store.NO, Field.Index.NOT_ANALYZED); Field oldName = new Field("oldName", card.oldName.Replace(",", " 龴 "), Field.Store.NO, Field.Index.ANALYZED); Field shortName = new Field("shortName", card.shortName.Replace(",", " 龴 "), Field.Store.NO, Field.Index.ANALYZED); Field oldName2 = new Field("oldName2", card.oldName, Field.Store.YES, Field.Index.NOT_ANALYZED); Field shortName2 = new Field("shortName2", card.shortName, Field.Store.YES, Field.Index.NOT_ANALYZED); Field pyname = new Field("pyname", GetPingyin.convertline(card.name), Field.Store.NO, Field.Index.ANALYZED); Field pyoldName = new Field("pyoldName", GetPingyin.convertline(card.oldName), Field.Store.NO, Field.Index.ANALYZED); Field pyshortName = new Field("pyshortName", GetPingyin.convertline(card.shortName), Field.Store.NO, Field.Index.ANALYZED); Field cardType = new Field("cardType", card.sCardType, Field.Store.YES, Field.Index.ANALYZED); Field cardType2 = new Field("cardType2", ict.ToString(), Field.Store.NO, Field.Index.NOT_ANALYZED); Field effectType = new Field("effectType", card.effectType, Field.Store.YES, Field.Index.ANALYZED); Field effect = new Field("effect", card.effect, Field.Store.YES, Field.Index.ANALYZED); Field infrequence = new Field("infrequence", card.infrequence, Field.Store.YES, Field.Index.ANALYZED); Field package = new Field("package", card.package, Field.Store.YES, Field.Index.ANALYZED); Field limit = new Field("limit", card.limit.ToString(), Field.Store.YES, Field.Index.ANALYZED); Field cheatcode = new Field("cheatcode", card.cheatcode, Field.Store.YES, Field.Index.ANALYZED); Field aliasList = new Field("aliasList", card.aliasList, Field.Store.YES, Field.Index.ANALYZED); Field adjust = new Field("adjust", card.adjust, Field.Store.YES, Field.Index.NO); Field associate = new Field("associate", card.associate, Field.Store.YES, Field.Index.NO); Field cardCamp = new Field("cardCamp", card.cardCamp.ToString(), Field.Store.YES, Field.Index.ANALYZED); Field level = null; Field pendulumL = null; Field pendulumR = null; Field element = null; Field tribe = null; Field atk = null; Field atkValue = null; Field def = null; Field defValue = null; if (ict < 20) { //怪兽卡 level = new Field("level", string.Format("{0:D2}", card.level), Field.Store.YES, Field.Index.NOT_ANALYZED); pendulumL = new Field("pendulumL", string.Format("{0:D2}", card.pendulumL), Field.Store.YES, Field.Index.NOT_ANALYZED); pendulumR = new Field("pendulumR", string.Format("{0:D2}", card.pendulumR), Field.Store.YES, Field.Index.NOT_ANALYZED); element = new Field("element", card.element, Field.Store.YES, Field.Index.NOT_ANALYZED); tribe = new Field("tribe", card.tribe, Field.Store.YES, Field.Index.NOT_ANALYZED); atk = new Field("atk", card.atk, Field.Store.YES, Field.Index.NOT_ANALYZED); atkValue = new Field("atkValue", string.Format("{0:D4}", card.atkValue), Field.Store.YES, Field.Index.NOT_ANALYZED); //atkValue = new NumericField("atkValue", Field.Store.YES, true).SetIntValue(card.atkValue); def = new Field("def", card.def, Field.Store.YES, Field.Index.NOT_ANALYZED); defValue = new Field("defValue", string.Format("{0:D4}", card.defValue), Field.Store.YES, Field.Index.NOT_ANALYZED); } else { //魔陷卡 level = new Field("level", "-01", Field.Store.YES, Field.Index.NOT_ANALYZED); pendulumL = new Field("pendulumL", "-01", Field.Store.YES, Field.Index.NOT_ANALYZED); pendulumR = new Field("pendulumR", "-01", Field.Store.YES, Field.Index.NOT_ANALYZED); element = new Field("element", "", Field.Store.YES, Field.Index.NOT_ANALYZED); tribe = new Field("tribe", "", Field.Store.YES, Field.Index.NOT_ANALYZED); atk = new Field("atk", "", Field.Store.YES, Field.Index.NOT_ANALYZED); atkValue = new Field("atkValue", "-0002", Field.Store.YES, Field.Index.NOT_ANALYZED); def = new Field("def", "", Field.Store.YES, Field.Index.NOT_ANALYZED); defValue = new Field("defValue", "-0002", Field.Store.YES, Field.Index.NOT_ANALYZED); } doc.Add(ID); doc.Add(name); doc.Add(name2); doc.Add(japName); doc.Add(japName2); doc.Add(enName); doc.Add(oldName); doc.Add(shortName); doc.Add(oldName2); doc.Add(shortName2); doc.Add(pyname); doc.Add(pyoldName); doc.Add(pyshortName); doc.Add(cardType); doc.Add(cardType2); doc.Add(level); doc.Add(pendulumL); doc.Add(pendulumR); doc.Add(element); doc.Add(tribe); doc.Add(effectType); doc.Add(atk); doc.Add(atkValue); doc.Add(def); doc.Add(defValue); doc.Add(effect); doc.Add(infrequence); doc.Add(package); doc.Add(limit); doc.Add(cheatcode); doc.Add(aliasList); doc.Add(adjust); doc.Add(associate); doc.Add(cardCamp); if (card.iCardType == 1) { doc.SetBoost(1); } else { doc.SetBoost(2); } writer.AddDocument(doc); if (processchanged != null) { processchanged.Invoke(cards.Length, i + 1); } } writer.Optimize(); writer.Close(); //记录当前索引文件夹的文件列表 if (dirname[dirname.Length - 1] != '\\') { dirname += "\\"; } string files = ""; foreach (string s in Directory.GetFiles(dirname)) { string ss = s.Substring(s.LastIndexOf('\\') + 1); if (!string.Equals(ss, "list.txt", StringComparison.OrdinalIgnoreCase)) { files += ss + "\r\n"; } } File.WriteAllText(dirname + "list.txt", files, Encoding.UTF8); }