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

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

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

    posts - 33,  comments - 11,  trackbacks - 0
     

    Compass是第一個(gè)實(shí)現(xiàn)java搜索引擎的開源框架,它是基于Lucene之上的,提供更簡(jiǎn)單的搜索引擎API,事務(wù)支持,對(duì)象到搜索引擎映射(Annotations & XML),Xml到搜索引擎映射,可以和Hibernate,Spring集成,功能非常的強(qiáng)大。如果用Hibernate,Spring做的項(xiàng)目需要搜索引擎的話,Compass是個(gè)非常好的選擇。個(gè)人認(rèn)為:如果說(shuō)Lucene是搜索引擎中的JDBC,那么Compass就是HibernateCompassHibernate不僅僅是比喻的像,它們的類和用法,和作用也非常的像。Compass是用面向?qū)ο缶幊谭椒▉?lái)實(shí)現(xiàn)搜索。如果會(huì)Hibernate的話學(xué)Compass是非常容易的。

    大家可以到http://www.opensymphony.com/compass/download.action去下載最新的版本。2006828Compass 1.1 M1 發(fā)布,用的是Lucene2.0,現(xiàn)在講的就是這個(gè)版本。

    雖然有人說(shuō)Hibernate3.1以后版本自帶了對(duì)Lucene的支持,Compass好像沒(méi)用,但是只要看一下Hibernate源代碼可以看出Hibernate對(duì)Lucene的支持很簡(jiǎn)陋,且不支持事務(wù)并且Hibernate3.2用的還是Lucene版本是Lucene1.4.3,所以說(shuō)當(dāng)做大的項(xiàng)目的時(shí)候Compass還是非常有必要的。

    還是先看個(gè)HelloWorld程序:(這里的測(cè)試功能的例子都是用的JUnit測(cè)試用例,為方便閱讀異常全部拋出)

    一共4個(gè)文件Article.java compass.cfg.xmlArticle.cpm.xmlJUnit插入測(cè)試。

    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;

        }

    }

    上面就是一個(gè)ArticlePOJO類上面有文章題目,內(nèi)容,發(fā)布時(shí)間,這里的idcompass必須的(有點(diǎn)和數(shù)據(jù)庫(kù)一樣了)。

    2.compass.cfg.xml

    <!DOCTYPE compass-core-configuration PUBLIC

        "-//Compass/Compass Core Configuration DTD 1.0//EN"

        "http://www.opensymphony.com/compass/dtd/compass-core-configuration.dtd">

    <compass-core-configuration>

        <compass>

            <setting name="compass.engine.connection">target/test</setting><!-- 這里配置的是索引的相對(duì)路徑 -->

            <mapping resource="org/li/compass/Article.cpm.xml"/><!-- 這里是每個(gè)對(duì)象的映射文件 -->

        </compass>

    </compass-core-configuration>

    這是Compass的配置文件上面標(biāo)明了索引目錄和映射文件。映射好文件了就看看這個(gè)映射的什么吧

    3. Article.cpm.xml

    <!DOCTYPE compass-core-mapping PUBLIC

        "-//Compass/Compass Core Mapping DTD 1.0//EN"

        "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd">

    <compass-core-mapping package="org.li.compass">

        <class name="Article" alias="article">

            <!-- 這是必須有的 -->

            <id name="id"/>

            <!-- 你可以通過(guò)這個(gè)配置來(lái)在底層給這個(gè)對(duì)象加一個(gè)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>

    這個(gè)配置應(yīng)該可以看的懂吧可能會(huì)有人問(wèn)meta-data是干什么用的??

    它的值是作為底層Field的名字,如果沒(méi)有配置的話Compass$article/來(lái)代替。而它的作用是配置對(duì)象的屬性的儲(chǔ)存形式,Compass就是讀取它來(lái)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插入測(cè)試

    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是第一個(gè)基于lucenejava開源框架");

            article.setTitle("學(xué)習(xí)Compass");

            article.setPublishDate(new Date());

            comSession.save(article);

            comTx.commit();

        }

    當(dāng)大家看到這里的時(shí)候就看出來(lái)CompassHibernate太像了。如果會(huì)Hibernate的話,學(xué)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());

        }

    結(jié)果:

    學(xué)習(xí)Compass

    Compass是第一個(gè)基于lucenejava開源框架

    Sat Sep 23 00:51:35 CST 2006

     

    注意:和其它的框架一樣,Compass也是需要一定的配置的,而Compass的數(shù)據(jù)配置可分為AnnotationsDTD驗(yàn)證的XMLSchema驗(yàn)證的XML。這里用的是dtd驗(yàn)證的XML配置。

    我們可以用Lucene做一下檢測(cè)嘛

    JUnit測(cè)試用例:

    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"));//大家可以在這里設(shè)置個(gè)斷點(diǎn)看一下doc里各個(gè)Field是什么。就會(huì)學(xué)到很多的東西

            }

    }

    posted on 2007-12-18 11:03 方濤升 閱讀(352) 評(píng)論(0)  編輯  收藏 所屬分類: lucene

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 色视频色露露永久免费观看| 自拍偷自拍亚洲精品被多人伦好爽 | 日韩电影免费在线观看视频| 亚洲成AV人片在线观看无码 | 亚洲美女在线国产| 亚洲专区一路线二| 久久国产精品萌白酱免费| 亚洲av无码天堂一区二区三区| 亚洲一级毛片视频| 污视频在线免费观看| 亚洲一区二区精品视频| 亚洲乱色伦图片区小说| 人与禽交免费网站视频| 亚洲国产成人一区二区三区| 黄页网站在线视频免费| 免费理论片51人人看电影| 亚洲国产成人精品无码区在线秒播| a级片免费在线观看| 亚洲美女高清一区二区三区| 亚洲AV无码成人精品区狼人影院 | 99久久综合国产精品免费| 亚洲国产精品久久久久网站| 好湿好大好紧好爽免费视频| 国产成人免费a在线视频app| 亚洲色无码国产精品网站可下载| 免免费国产AAAAA片| 亚洲人成网站影音先锋播放| 中文字幕无码毛片免费看| 亚洲国产精品一区二区第一页免| 亚洲国产精品成人午夜在线观看| 免费影院未满十八勿进网站| 亚洲嫩草影院在线观看| 中文字幕免费高清视频| 亚洲AV无码AV男人的天堂| 三级网站在线免费观看| 中文字幕亚洲乱码熟女一区二区| 免费人成在线观看播放a| 四虎永久免费观看| 国产精品亚洲а∨无码播放不卡| 在线观看成人免费| 亚洲熟妇AV乱码在线观看|