使用Lucene 對(duì)JTable進(jìn)行搜索
Posted on 2009-10-19 15:52 guanminglin@gmail.com 閱讀(29229) 評(píng)論(11) 編輯 收藏 所屬分類: JavaSE 、NetBeans經(jīng)常會(huì)遇到一個(gè)表格中有許多的數(shù)據(jù),想要找到一條符合自己要求的數(shù)據(jù)會(huì)比較麻煩,需要一條一條的找。數(shù)據(jù)量小還好,但是如果有幾百條上千條的數(shù)據(jù)找起來就比較麻煩了。Lucene 提供了一個(gè)拓展包 lucene-swing,可以很方便的對(duì)JTable進(jìn)行搜索。
下面介紹一下拓展包,以及如何使用這個(gè)拓展包:
Lucene-swing 并不在Lucene的核心包中而是以拓展包的形式存在,所以你可以在下載的Lucene包中找到它。請(qǐng)看下面的截圖:
在這個(gè)包中提供了兩種搜索形式:TableSearcher 和 ListSearcher
顧名思義 就是提供對(duì)JTable 和JList 進(jìn)行搜索的功能。
一、表格搜索功能
1、org.appche.lucene.swing.models.TableSearcher
要想對(duì)表格進(jìn)行搜索,先要對(duì)表格的模型進(jìn)行包裝,在Swing的MVC模型中model中存在數(shù)據(jù),操作表格中的數(shù)據(jù)基本上都是操作Model中的數(shù)據(jù)。Lucene -swing對(duì)表格模型進(jìn)行了包裝,所以可以很好的對(duì)JTable進(jìn)行搜索。
一般使用Lucene-swing的步驟是:
MytableModel model = new MytableModel(); //再新建一個(gè)表格模型
//下面就是包裝原有的表格模型了
//其實(shí)TableSearcher 也是一個(gè)表格模型,只是對(duì)原有的表格模型進(jìn)行了包裝
TableSearcher searcher = new TableSearcher(model);
table.setModel(searcher);
接著就可以在的搜索按鈕或者JTextField的鍵盤監(jiān)聽事件中調(diào)用搜索方法了
一般情況下都會(huì)將這個(gè)方法封裝:
String keywords = keyWordTF.getText().toLowerCase();
searcher.search(keywords); //搜索表格并返回結(jié)果
}
下面是我寫的一個(gè)例子的截圖:
初始化界面:
搜索結(jié)果界面:
如果你細(xì)心的話,你會(huì)發(fā)現(xiàn)上面的搜索都是英文的,那它能搜索中文嗎?答案是肯定的,不過你要提供中文分詞器。在TableSearcher 類中提供了一個(gè)設(shè)置分詞器的方法:
中文分詞器,我這里使用的是JE 分詞,jeasy.analysis.MMAnalyzer。
所以你可以這樣調(diào)用:searcher.setAnalyzer(new MMMnalyzer());
接下來就來檢驗(yàn)一下是否可以對(duì)中文進(jìn)行搜索了。
現(xiàn)改變一些模型數(shù)據(jù),改完后的界面:
可以看到有兩條有中文的數(shù)據(jù),現(xiàn)在看看效果如何:

可以看到已經(jīng)可以搜索中文了。