较早的时候分析过Jforum中的lucene索引模块,当时觉得代码真是短小精悍!值得学习。
1.SearchManager接口,
JForum定义了一个SearchManager接口,通过LuceneManager实现了其中的方法。对于索引和检索进行统一的管理。
其余的是,针对POST的create、delete、update索引方法。
2.LuceneIndexer类
主要是对POST建立索引,主要方法有:
2.1 create(Post post)
新建一个Lucene中的IndexWriter,通过createDocument方法对于POST进行索引,关闭writer,调用notifyNewDocumentAdded()方法
告知IndexSearch索引已经更新,需要重新的打开。
2.2 createDocument(Post)方法
将POST_ID,FORUM_ID,TOPIC_ID,USER_ID,文章内容进行索引。
2.3 Update(Post)方法
更新Post之后,重新建立索引。
首先删除该Post的索引,通过POST_ID,然后重新建立索引。
2.4 notifyNewDocumentAdded方法
在建立索引或者重新建立索引之后,都调用notifyNewDocumentAdded通知IndexSearch,索引文件已经更新,需要重新载入。
其中LuceneSearch实现了NewDocumentAdded接口。
<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
重新打开索引文件。
3.索引总结
结构很清晰,就是提交POST或者更新POST之后,重新打开索引文件。