lucene搜索引擎與數據庫like查詢的比較java
1>在數據量比較大查詢字段比較多的狀況下,若是採用數據庫like查詢,性能比較差,而採用lucene來查詢,性能相對like查詢要好sql
2>若是採用lucene進行搜索,搜索到的結果相關度比較高,面具把匹配度高的記錄排在最前面,而數據庫的like語句查詢只會查詢有關鍵字的記錄,其內容相關度不高,而且不能實現把匹配度高的記錄排在最前面數據庫
3>採用lucene進行搜索,可以進行高亮顯示,而數據庫的sql語句查詢作不到這一點編程
lucene的使用:
1>創建索引
2>查詢索引
會用到一個分詞技術
分詞原理:一元分詞(一個字一個字的分)/二元分session
詞(二個字二個字的分)/字典分詞(匹配度最高,效果最好,app
必須有字典,paoding分詞器)
lucene 封裝框架:Compass API(面向對象操做索引 Object 框架
search engine/mapping,對象搜索引擎映射框架)[OSEM產post
品]性能
Compass的使用
1>設置實體,,並映射爲搜索實體(@Searchale-->把該類定義爲搜索實體,該實體與索引中的document進行映射)
2>設置標識屬性(@SearchableId-->定義該屬性爲搜索實體的標識屬性,由於映射到doucment中的id字段;通@SearchProperty(name="XXX")註解定義某個屬性跟document中的某個字段進行映射,name="XXX"表示document中的字段名稱,index屬性(index=Index.NOT_ANALYZED:不分詞,但創建索引;index=Index.ANALYZED:分詞並創建索引))ui
Compass只有添加/刪除功能
使用可編程方式配置Compass,和sessionFactory差很少,同樣是獲得一個compassFactory public Compass cf; cf=new CompassAnnotationsConfiguration().setSettion("CompassEnvitronment.CONNECTION","file://XXX") //指定索引文件存放的目錄;CompassEnvitronment.CONNECTION,"ram://XXX"表示把索引文件存放到內存中 .setSettion("compass.engine.analyzer.default.type","net.paoding.analysis.analyzer.PaodingAnalyzer") //Compass中默認使用的中文分詞器是一元分詞器,更改默認字典分詞器 .setSettion("compass.engine.highlighter.default.formatter.simple.pre","<font color='red'>") .setSettion("compass.engine.highlighter.default.formatter.simple.post","</font>") .addScan("com.eason.entity") //表示自動搜索指定目錄下的搜索實體(@Searchale) .buildCompass(); 使用compass CompassSession session=cf.openSession(); CompassTransaction ct=session.beginTransaction(); session.beginTransaction(); CompassTransaction session.save(Entity);//保存搜索實體到索引文件中去Compass中能夠實現增量索引, 當保存實體時,實體是在原有的數據上增長上去的 (這裏有個專業解釋叫作"實時增量") session.commit(); session.close(); com.close();