<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    OMG,到底在尋找什么..................
    (構造一個完美的J2EE系統所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0

    Compass學習文檔(1)
    作者:javafish
    Compass是第一個實現java搜索引擎的開源框架,它是基于Lucene之上的,提供更簡單的搜索引擎API,事務支持,對象到搜索引擎映射(Annotations & XML),Xml到搜索引擎映射,可以和Hibernate,Spring集成,功能非常的強大。如果用Hibernate,Spring做的項目需要搜索引擎的話,Compass是個非常好的選擇。個人認為:如果說Lucene是搜索引擎中的JDBC,那么Compass就是Hibernate。而Compass和Hibernate不僅僅是比喻的像,它們的類和用法,和作用也非常的像。Compass是用面向對象編程方法來實現搜索。如果會Hibernate的話學Compass是非常容易的。
    大家可以到http://www.opensymphony.com/compass/download.action去下載最新的版本。2006年8月28日Compass 1.1 M1 發布,用的是Lucene2.0,現在講的就是這個版本。
    雖然有人說Hibernate3.1以后版本自帶了對Lucene的支持,Compass好像沒用,但是只要看一下Hibernate源代碼可以看出Hibernate對Lucene的支持很簡陋,且不支持事務并且Hibernate3.2用的還是Lucene版本是Lucene1.4.3,所以說當做大的項目的時候Compass還是非常有必要的。
    還是先看個HelloWorld程序:(這里的測試功能的例子都是用的JUnit測試用例,為方便閱讀異常全部拋出)
    一共4個文件Article.java, compass.cfg.xml,Article.cpm.xml,JUnit插入測試。
    1.Article.java:
    package org.li.compass;

    import java.util.Date;

    public class Article
    {
    ?private long id;
    ?private String title;
    ?private String content;
    ?private Date publishDate;
    ?public String getContent()
    ?{
    ??return content;
    ?}
    ?public void setContent(String content)
    ?{
    ??this.content = content;
    ?}
    ?public Date getPublishDate()
    ?{
    ??return publishDate;
    ?}
    ?public void setPublishDate(Date publishDate)
    ?{
    ??this.publishDate = publishDate;
    ?}
    ?public String getTitle()
    ?{
    ??return title;
    ?}
    ?public void setTitle(String title)
    ?{
    ??this.title = title;
    ?}
    ?public long getId()
    ?{
    ??return id;
    ?}
    ?public void setId(long id)
    ?{
    ??this.id = id;
    ?}
    }
    上面就是一個Article的POJO類上面有文章題目,內容,發布時間,這里的id的compass必須的(有點和數據庫一樣了)。
    2.compass.cfg.xml
    <!DOCTYPE compass-core-configuration PUBLIC
    ??? "-//Compass/Compass Core Configuration DTD 1.0//EN"
    ??? "<compass-core-configuration>
    ?<compass>
    ??<setting name="compass.engine.connection">target/test</setting><!-- 這里配置的是索引的相對路徑 -->
    ??<mapping resource="org/li/compass/Article.cpm.xml"/><!-- 這里是每個對象的映射文件 -->
    ?</compass>
    </compass-core-configuration>
    這是Compass的配置文件上面標明了索引目錄和映射文件。映射好文件了就看看這個映射的什么吧
    3. Article.cpm.xml
    <!DOCTYPE compass-core-mapping PUBLIC
    ??? "-//Compass/Compass Core Mapping DTD 1.0//EN"
    ??? "
    <compass-core-mapping package="org.li.compass">
    ?<class name="Article" alias="article">
    ??<!-- 這是必須有的 -->
    ??<id name="id"/>
    ??<!-- 你可以通過這個配置來在底層給這個對象加一個Field("type","java") -->
    ??<constant>
    ???<meta-data>type</meta-data>
    ???<meta-data-value>java</meta-data-value>
    ??</constant>
    ??<!-- 配置一下屬性 -->
    ??<property name="title">
    ???<meta-data>titleIndex</meta-data>
    ??</property>
    ??<property name="content">
    ???<meta-data>contentIndex</meta-data>
    ??</property>
    ??<property name="publishDate">
    ???<meta-data>publishDateIndex</meta-data>
    ??</property>
    ?</class>
    </compass-core-mapping>
    這個配置應該可以看的懂吧可能會有人問meta-data是干什么用的??
    它的值是作為底層Field的名字,如果沒有配置的話Compass用$article/…來代替。而它的作用是配置對象的屬性的儲存形式,Compass就是讀取它來new Field()的:
    <!ELEMENT meta-data (
    ??? #PCDATA
    )>
    ??? <!ATTLIST meta-data store (no|yes|compress) "yes">
    ??? <!ATTLIST meta-data index (no|tokenized|un_tokenized) "tokenized">
    ??? <!ATTLIST meta-data term-vector (no|yes|positions|offsets|positions_offsets) "no">
    ??? <!ATTLIST meta-data reverse (no|reader|string) "no">
    ??? <!ATTLIST meta-data analyzer CDATA #IMPLIED>
    ??? <!ATTLIST meta-data exclude-from-all (true|false) #IMPLIED>
    ??? <!ATTLIST meta-data converter CDATA #IMPLIED>
    ??? <!ATTLIST meta-data format CDATA #IMPLIED>
    ??? <!ATTLIST meta-data boost CDATA #IMPLIED>
    4.JUnit插入測試
    public void InsertCompass()
    ?{
    CompassConfiguration comConfig = new CompassConfiguration().configure().addClass(Article.class);
    ??Compass com = comConfig.buildCompass();
    ??CompassSession comSession = com.openSession();
    ??CompassTransaction comTx = comSession.beginTransaction();
    ??
    ??Article article = new Article();
    ??article.setContent("Compass是第一個基于lucene的java開源框架");
    ??article.setTitle("學習Compass");
    ??article.setPublishDate(new Date());
    ??comSession.save(article);
    ??comTx.commit();
    ?}
    當大家看到這里的時候就看出來Compass和Hibernate太像了。如果會Hibernate的話,學Compass將是非常容易的。
    看看效果如何:
    public void LoadCompass()
    ?{
    ??CompassConfiguration comConfig = new CompassConfiguration().configure().addClass(Article.class);
    ??Compass com = comConfig.buildCompass();
    ??CompassSession comSession = com.openSession();
    ??CompassTransaction comTx = comSession.beginTransaction();
    ??
    ??Article article = (Article)comSession.load(Article.class, 0);
    ??System.out.println(article.getTitle());
    ??System.out.println(article.getContent());
    ??System.out.println(article.getPublishDate());
    ?}
    結果:
    學習Compass
    Compass是第一個基于lucene的java開源框架
    Sat Sep 23 00:51:35 CST 2006

    注意:和其它的框架一樣,Compass也是需要一定的配置的,而Compass的數據配置可分為Annotations,DTD驗證的XML和Schema驗證的XML。這里用的是dtd驗證的XML配置。
    我們可以用Lucene做一下檢測嘛
    JUnit測試用例:
    public void TestArticle() throws ParseException, IOException
    ?{
    ??QueryParser queryParser = new QueryParser("titleIndex",new StandardAnalyzer());
    ??Query query = queryParser.parse("compass");
    ??IndexSearcher indexSearcher = new IndexSearcher("target/test/index/article");
    ??Hits hits = indexSearcher.search(query);
    ??for(int i=0;i<hits.length();i++)
    ??{
    ???Document doc = hits.doc(i);
    ???System.out.println(doc.get("contentIndex"));//大家可以在這里設置個斷點看一下doc里各個Field是什么。就會學到很多的東西
    ??}
    }


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

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風云人物

    文檔

    朋友

    相冊

    經典網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎免费永久在线播放| 日韩在线a视频免费播放| 亚洲AV无码乱码国产麻豆穿越 | 亚洲一级高清在线中文字幕| 十九岁在线观看免费完整版电影| 国产亚洲综合一区柠檬导航| a级在线观看免费| 久久久久亚洲av无码尤物| 一区二区三区四区免费视频| 亚洲视频一区在线| 免费H网站在线观看的| 成人亚洲国产va天堂| 日韩视频免费在线| 免费人成网站永久| 中文字幕专区在线亚洲| 成人爽a毛片免费| 1区1区3区4区产品亚洲| 国产成人免费爽爽爽视频| 亚洲AV无码专区国产乱码不卡| 日韩亚洲精品福利| aa级女人大片喷水视频免费| 久久久无码精品亚洲日韩按摩| 成人免费无码大片A毛片抽搐色欲| 亚洲国产精品无码久久九九大片| 亚洲精品456播放| 99热在线免费观看| 亚洲性无码一区二区三区| 亚洲国产精品尤物YW在线观看| 中文字幕久精品免费视频 | 亚洲精华国产精华精华液好用| 亚洲欧洲精品成人久久曰影片 | 我们的2018在线观看免费高清| 日韩欧美亚洲中文乱码| 亚洲人成影院在线无码按摩店| 日本最新免费网站| 日韩电影免费在线观看网址| 色播亚洲视频在线观看| 白白国产永久免费视频| 鲁丝片一区二区三区免费 | 国产男女猛烈无遮挡免费视频网站 | 成年女人免费视频播放体验区|