public void Test1() { //建立一个内存目录 Lucene.Net.Store.RAMDirectory ramDir = new Lucene.Net.Store.RAMDirectory(); //建立一个索引书写器 IndexWriter ramWriter
前提是不利用Sort排序的情况下): private void btnSearch_Click(object sender, EventArgs e) { RAMDirectory ramDir = new RAMDirectory(); IndexWriter iw = new IndexWriter(ramDir,new StandardAnalyzer
前提是不利用Sort排序的情况下): private void btnSearch_Click(object sender, EventArgs e) { RAMDirectory ramDir = new RAMDirectory(); IndexWriter iw = new IndexWriter(ramDir,new StandardAnalyzer
这使得读写操作方式更统一起来,如基于内存的索引(RAM-basedindices)的实现(即RAMDirectory)、通过JDBC存储在数据库中的索引、将一个索引存储为一个文件的实现(即FSDirectory (2)org.apache.lucene.store.RAMDirectory RAMDirectory类是一个驻留内存的(memory-resident)Directory抽象类的实现。
第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。? Query ? org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory IndexWriterConfig writerConfig=new IndexWriterConfig(analyzer);//写索引配置 //Directory ramDirectory = new RAMDirectory();//索引写的内存 Directory directory= FSDirectory.open(Paths.get(indexDir));//索引存储磁盘位置
RAMDirectory来替代FSDirectory. 在实际应用中RAMDirectory和FSDirectory协作可以更好的利用内存来优化建立索引的时间. 具体方法如下: 1.建立一个使用FSDirectory的IndexWriter 2 .建立一个使用RAMDirectory的IndexWriter 3 把Document添加到RAMDirectory中 ("index",true); private RAMDirectory ramDir = new RAMDirectory(); private IndexWriter 利用RAMDirectory并行建立索引 RAMDirectory还提供了使用多线程来建立索引的可能性.下面这副图很好的说明了这一点.
StandardAnalyzer(); // Store the index in memory: Directory directory = new RAMDirectory
Lucene允许我们先把索引写入到RAMDirectory,达到一定数据量的时候再批量写进FSDirectory,减少磁盘的操作。
private AnalyzingInfixSuggester suggester; /** * 内存存储:优点速度快,缺点程序退出数据就没了 */ protected RAMDirectory * @return */ @PostConstruct protected void initSuggest() { directory = new RAMDirectory
希望帮到有需要的小伙伴: Analyzer analyzer = new StandardAnalyzer(); // 1. create the index Directory index = new RAMDirectory
第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 在清单 1 中,我们注意到类 IndexWriter 的构造函数需要三个参数,第一个参数指定了所创建的索引要存放的位置,他可以是一个 File 对象,也可以是一个 FSDirectory 对象或者 RAMDirectory } } 在清单 2 中,类 IndexSearcher 的构造函数接受一个类型为 Directory 的对象,Directory 是一个抽象类,它目前有两个子类:FSDirctory 和 RAMDirectory
第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。
index Directory index = FSDirectory.open(Paths.get("E:\\tmp\\index")); //Directory index = new RAMDirectory
3.1.1 Directory l Directory,指的是文件磁盘的索引路径 l RAMDirectory,指的是内存中的索引路径 3.1.2 Analyzer 3.1.2.1 原理 Analyzer RAMDirectory是内存的一个区域,当虚拟机退出后,里面的内容也会随之消失 RAMDirectory的性能要好于FSDirectory, 因此可以结合使用,在虚拟机退出时,将RAM内容转到FSDirectory
其中FilterDirectory的子类都是给Directory添加附加的功能:TrackingDirectoryWrapper是记录文件的写入或删除;NRTCachingDirectory是提供对RAMDirectory BaseDirectory的子类中,FileSwitchDirectory针对lucene的不同的索引文件使用不同的Directory;CompoundFileDirectory用于访问一个组合的数据流;RAMDirectory
var directory = new RAMDirectory(); var config = new IndexWriterConfig(analyzer); var indexWriter = new 另外代码中我们使用了 RAMDirectory,这个是用来进行测试的基于内存的虚拟文件目录,使用起来比较方便不需要指定文件路径拿来即用。
FSDirectory.open(new File("D:\\temp\\index").toPath()); //索引库还可以存放到内存中 //Directory directory = new RAMDirectory
Directory fsDirectory = FSDirectory.open(new File("E:/indexDBDBDBDBDBDBDBDB")); Directory ramDirectory = new RAMDirectory(fsDirectory); IndexWriter fsIndexWriter = new IndexWriter(fsDirectory,LuceneUtil.getAnalyzer (),true,LuceneUtil.getMaxFieldLength()); IndexWriter ramIndexWriter = new IndexWriter(ramDirectory ramIndexWriter.addDocument(document); ramIndexWriter.close(); fsIndexWriter.addIndexesNoOptimize(ramDirectory
reader.getTermFreqVector(i, "content") for tk in tv.getTerms(): print tk initVM() directory = RAMDirectory
org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.IOContext; import org.apache.lucene.store.RAMDirectory Directory directory1=new RAMDirectory(directory,ioContext); IndexReader indexReader=DirectoryReader.open