Lucene索引创建过程

本文深入剖析了Lucene创建索引的过程,包括使用场景、创建IndexWriter、构建Document、更新Document的详细步骤。重点讨论了DocumentsWriterPerThreadPool、ThreadState等关键类的作用,以及为何Lucene更新Document需要先删除再添加的机制。
摘要由CSDN通过智能技术生成

 

本文档旨在分析Lucene如何把业务信息写到磁盘上的大致流程,并不涉及Document中每个Field如何存储(该部分放在另外一篇wiki中介绍)。

一,Lucene建索引API

 
1
2
3
4
5
6
7
8
9
10
Directory dire = NIOFSDirectory.open(FileSystems.getDefault().getPath(indexDirectory));
IndexWriterConfig iwc =  new  IndexWriterConfig( new  StandardAnalyzer());
iwc.setRAMBufferSizeMB( 64 );  //兆默认刷
indexWriter =  new  IndexWriter(dire, iwc);
  
Document doc = createDocument(artiste, skuId);
indexWriter.addDocument(doc);
  
indexWriter.commit();
indexWriter.close();

二,创建IndexWriter

NIOFSDirectory.open()

如果是64位JRE会得到MMapDirectory(采用内存映射的方式写索引数据到File中)。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
IndexWriterConfig
  
//properties
this .analyzer = analyzer;
ramBufferSizeMB = IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB; //默认超过16M就会触发flush磁盘操作
maxBufferedDocs = IndexWriterConfig.DEFAULT_MAX_BUFFERED_DOCS; //默认按照RAM空间大小触发flush
maxBufferedDeleteTerms = IndexWriterConfig.DEFAULT_MAX_BUFFERED_DELETE_TERMS; //
mergedSegmentWarmer =  null ;
delPolicy =  new  KeepOnlyLastCommitDeletionPolicy(); //删除策略
commit =  null ;
useCompoundFile = IndexWriterConfig.DEFAULT_USE_COMPOUND_FILE_SYSTEM;
openMode = OpenMode.CREATE_OR_APPEND; //IndexWriter打开模式
similarity = IndexSearcher.getDefaultSimilarity(); //相似度计算,一般初始化Searcher的时候会用(因为只有查询的时候才会用到相似度计算)
mergeScheduler =  new  ConcurrentMergeScheduler(); //每个segement的merge交个一个线程完成
writeLockTimeout = IndexWriterConfig.WRITE_LOCK_TIMEOUT; //写操作遇到锁超时时间
indexingChain = DocumentsWriterPerThread.defaultIndexingChain;
codec = Codec.getDefault();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值