一些公用的基础类
表 3.2 基础类包org.apache.lucene.util
类
说明
Arrays
一个关于数组的排序方法的静态类,提供了优化的基于快排序的排序方法sort
BitVector
C/C++语言中位域的java实现品,但是加入了序列化能力
Constants
常量静态类,定义了一些常量
PriorityQueue
一个优先队列的抽象类,用于后面实现各种具体的优先队列,提供常数时间内的最小元素访问能力,内部实现机制是哈析表和堆 ...
Lucene索引文檔格式:
以上就是Lucene的索引文件的概念结构。Lucene索引index由若干段(segment)组成,每一段由若干的文档(document)组成,每一个文档由若干的域(field)组成,每一个域由若干的项(term)组成。项是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。
域是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项。
从概念上映射到结构中,索引被处理为一个目录(文件夹),其中含有的所有文件即为其内容,这些文件按照所属的段不同分组存放,同组的文件拥有相同的文件名,不同的扩展名。此 ...
Lucene的目的是为软件开发人员提供一个简单易用的工具包,Lucene的原作者是Doug Cutting。
Lucene作为一个全文检索引擎,其具有如下突出的优点:
(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
(2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
(4)设计了独立于语言和文件格 ...
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
全文检索的方法主要分为按字检索和按词检索两种。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前 ...
public abstract class Analyzer {
public abstract TokenStream tokenStream(String fieldName, Reader reader);
*
* @param fieldName Field name being indexed.
* @return position increment gap, added to the next token emitted from {@link #tokenStream(String,Reader)}
*/
public int ...
/**
* 關鍵詞提醒
* @param keyword
* @return
*/
public List remindKeyword(String keyword){
List keywordList = new ArrayList();
IndexReader indexReader;
try {
File indexDir = new File(INDEX_STORE_PATH);
if (indexDir.exists()){
indexReader = IndexReader.open(INDEX_STO ...
無特別之處,了解的朋友不用看。
/**
* 限制分類的搜索
* @param keyword
* @param categoryKeyword
* @return
* @throws LuceneException
*/
public List searchIndex(String keyword, String categoryKeyword) throws LuceneException{
Analyzer analyzer = new CJKAnalyzer();
BooleanQuery query = new B ...
txt與html解析存在亂碼的問題,這個問題困擾了我好幾天,最後找到一些資料,通過多次嘗試,基本解決了。
public class TxtDocHander extends DocHander {
public Document getDocument(byte[] inputByte) throws IOException {
// 進行文檔的編碼格式識別
CodepageDetectorProxy codepageDetectorProxy = CodepageDetectorProxy.getInstance();
codepageDetec ...
上篇有提到這段代碼:
DocHander docHander = DocHanderFactory.buildDocHander(fileName);
attachDocument = docHander.getDocument(attach);
下面我們看一看實現細節。
抽象類DocHander的代碼:
public abstract class DocHander {
public static String FIELD_CONTENT = "contents";
publ ...
/**
* 文檔主體建立索引
* 注意文檔與附件分成不同的Document,但搜索到附件內容時,需鏈接到其所在文檔
* @param article
* @return
* @throws InterruptedException
* @throws Exception
*/
private Document createArticleIndex(Article article) throws Exception{
Document document = new Document();
//ID
document. ...
對索引操作的類為KbIndexProcesser
文檔主體類:Article
public class Article {
private String id;
private String topic;
private String content;
private String categoryId;
private String category;
.......
}
附件實體類:ArticleAttach
public class ArticleAttach {
private String id;
private ...
《Lucene實戰開發手記》系列文章的適用對象為Lucene初學者。
本人所在項目組正在開發一個Call Center的系統。需要開發一個知識庫來為客服提供知識搜索的支持。採用Lucene做為搜索引擎。
知識庫的需求如下:
1、知識庫以文檔的形式組織,每篇文檔含標題、分類(樹狀)、內容,可上傳多個附件。
2、文檔內容支持html格式,標題、內容、附件均要建立索引,能被搜索到。附件格式支持doc,xls,pdf,txt,htm,html
...
索引3種方式:倒排、後綴數組和簽名文件.
一段讀寫文本文件的代碼:
BufferWriter writer = new BufferWriter(new FileWriter(destFile));
BufferReader reader = new BufferReader(new FileReader(readFile));
String line = reader.readLine();
while (line != null){
writer.write(newline);
writer.newLine();//寫入行分割符
}
reader.clos ...
链接
最新评论
-
你用过哪些工作流产品?
有时候系统需要引导,我使用我们自己公司内部的审批系统,也是工作流的,我是真不想用 ...
-- by dayang2001911 -
你用过哪些工作流产品?
惭愧,这方面经验不多,最早做OA时用过IBM的NOTES,但只能说懂点点。深入的 ...
-- by gzspark -
我们的项目毛坯上线了
我给了一些建议给项目经理。技术的积累需要时间,更需要人才,慢慢来。而观念的固化更 ...
-- by cleaneyes -
我们的项目毛坯上线了
你是项目中的骨干了,一些以前公司的好的经验,可以给现在的公司推广一下
-- by climber2002 -
夢-蝴蝶(六)
居然有人看,本来就不希望有多少人看的,其实繁体字多看几篇也就习惯了,不信你试试, ...
-- by cleaneyes







评论排行榜