OMG,到底在尋找什么..................
          (構造一個完美的J2EE系統所需要的完整知識體系)
          posts - 198,  comments - 37,  trackbacks - 0
          原貼地址:
          ? 已加入OpensymphonyCompass 是對Lucene搜索引擎在企業應用(數據庫應用)中的增強。 Lucene本身的API已經非常簡單,看看IBM DW上的Beef up Web search apps with Lucene已經大概了解,那Compass還能做什么樣的增強呢?

          ???? 1.在我的項目里,最實際的增強就是Data Mirror功能。

          ????? DataMirror會把數據庫的增刪改變化實時映射到索引文件中。如果你采用Hibernate等ORM方案,你只須在POJO中進行annotation注釋,Compass就會與Hibernate的event機制結合,或者使用AOP的方式,自動在數據庫增刪改時變更索引;如果你只是采用JDBC,也可以在XML文件配置Table Mapping或ResultSet Mapping,指定version列,Compasss定時進行索引更新。而且,Compass還支持事務,在查詢數據庫遍歷結果集的過程中如果出現異常,會在Index Segments 文件一級進行事務控制。

          ??? 如果沒有Compass,我們一般會在每天深夜重建一次索引。相比Compass的做法,
          ??? 一來反應遲緩,平均延時半天;
          ??? 二來效率沒有Compass高。如果采用完全重建索引,效率就不用說了。如果進行增量索引,就要增加一個字段,在數據更新時進行特殊的處理,刪除時也不能直接刪除數據,要等lucene刪完索引它才能刪除,這樣Lucene對應用就非常不透明了。
          ??? 三來不支持事務,如果建立索引過程中出現異常,索引文件的狀態是不可控的。

          ??? 2.Compass對查詢的API也作了一定簡化,可以考慮使用。

          ??? 詳見參考文檔 10.5 Searching, 簡單直接用session find,如

          CompassHits?hits?=?session.find("name:jack");

          ???加入排序,改分詞Analyzer,用QueryBuilder()

          CompassHits?hits?=?session.createQueryBuilder()
          ??.queryString(
          "+name:jack?+familyName:london")
          ????.setAnalyzer(
          "an1")?//?use?a?different?analyzer
          ??.toQuery()
          ????.addSort(
          "familyName",?CompassQuery.SortPropertyType.STRING)
          ??.hits();


          3. Compass的其他功能,用不用的上要看緣份了:?

          ?? 將Lucene的索引文件放入數據庫或內存。
          ?? 對索引文件根據不同的主題分開subIndex。
          ???對XML數據進行映射和索引....

          4.一段Pragmatic的Compass 搜索程序是這樣寫的:

          1.用annotation將pojo映射為searchable。(詳細請看參考文檔,如果沒有JDK5,可以參考XML式的配置)

          public?class?Product??{??
          ?@SearchableId
          ?
          private?Integer?id;
          ?
          private?String?name;
          ?@SearchableProperty(name?
          =?"name")
          ????
          public?String?getName()?{
          ????????
          return?this.name;
          ????}
          }

          2.用Compass提供的Spring2 Schema 來配置Compass與Hibernate,Spring的結合。
          ???SchemaBase的配置是Spring 2.0的新特征,相比原來的配置代碼要少一些。

          3.編寫搜索結果顯示頁,將Hits,Command,Page三個變量顯示出來。
          ?? Compass的代碼重用已經到了Controller一級,只要給Controller 配上compass bean和結果顯示的jsp就可以了。Controller提供足夠的配置參數,使它完全可以被配置重用,這是個值得SpringSide學習的地方。
          ? ?即使你的web應用不是采用Spring MVC,如果沒有大規模改寫的需求,也可以直接使用,讓Struts與Spring MVC并存。

          ?5.Controller默認的查詢需要擴展時

          ??? Contrller默認的查詢是在所有fileld里查詢關鍵字,如果需要限定field,加入排序,加入and ,exclude,模糊查詢等就不適用了。高級搜索頁一般會提供比較多的過濾條件輸入框讓用戶輸入,然后在Controller對這些輸入條件進行重新組合。

          ??? 組合的方式既可以按

          ??? 也可以用類似Hibernate Criteria API的方式,如:

          CompassHits?hits?=??session.createQueryBuilder().bool()
          ????.addMust(?queryBuilder.term(
          "name",?"jack")?)
          ????.addMustNot(?queryBuilder.term(
          "familyName",?"london")?)
          ??.toQuery()?.hits();


          ??? 因此,如果你的Lucene應用是面向數據庫的,就不妨用一下Compass。
          ???? Compass另一個讓我學習的地方是它充分考慮用戶客戶化的需要,enough thing can be configure ,從而連Controller也可以重用的做法。?


          <2006年11月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經典網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁明县| 南皮县| 珠海市| 大足县| 淮北市| 泉州市| 汉川市| 定日县| 彰化县| 林周县| 慈利县| 江源县| 台湾省| 都匀市| 盐城市| 英吉沙县| 伊宁县| 云梦县| 教育| 成武县| 油尖旺区| 齐齐哈尔市| 潼南县| 喀什市| 濮阳市| 六盘水市| 南陵县| 靖安县| 甘泉县| 太保市| 喀喇沁旗| 上高县| 新乡市| 黄山市| 新野县| 尚志市| 桦川县| 彩票| 纳雍县| 桂东县| 多伦县|