[搜索] 理解compass的配置文件

Compass概述

Compass是建立在Lucene基礎之上的一款開放源碼的JAVA搜索引擎框架。它可以將common meta data與實體對象進行映射。最終通過訪問common meta data來達到訪問對象的目的。

三類配置文件

Compass的配置文件主要分成三類:

  • *.cmd.xml文件
<compass-core-meta-data> 
    <meta-data-group id="petclinic" displayName="Petclinic Meta Data">   
        <descrīption>Petclinic Meta Data</descrīption> 
        <uri>http://compass/sample/petclinic</uri>       
        <alias id="vet" displayName="Vet"> 
            <descrīption>Vet alias</descrīption> 
            <uri>http://compass/sample/petclinic/alias/vet</uri> 
            <name>vet</name> 
        </alias> 
       ………… 
        <meta-data id="petType" displayName="Pet Type"> 
            <descrīption>The type of a pet</descrīption> 
            <uri>http://compass/sample/petclinic/petType</uri> 
            <name>petType</name> 
        </meta-data> 
    </meta-data-group> 
</compass-core-meta-data>

*.cmd.xml文件是對common meta data進行定義,我們就可以把它是當作Hibernate中的POJO來理解。裏面定義了最終搜索的結果中的最基本的元數據。

<meta-data-group id="petclinic" displayName="Petclinic Meta Data">  可當作是POJO的package來理解,petclinic可以看成是package name。

<alias id="vet" displayName="Vet"> 可當作是POJO的Class來理解,vet 可以看成是class name。

<meta-data id="petType" displayName="Pet Type">可當作是POJO的property來理解,petType可以看成是property name

  • *.cpm.xml文件
<compass-core-mapping package="org.compass.sample.petclinic"> 
    <contract alias="entity"> 
        <id name="id" /> 
    </contract> 
    <contract alias="person" extends="entity"> 
        <property name="firstName"> 
            <meta-data>${petclinic.firstName}</meta-data> 
        </property> 
        <property name="lastName"> 
            <meta-data>${petclinic.lastName}</meta-data> 
        </property> 
        <property name="address"> 
            <meta-data>${petclinic.address}</meta-data> 
        </property> 
        <property name="city"> 
            <meta-data>${petclinic.city}</meta-data> 
        </property> 
        <property name="telephone"> 
            <meta-data>${petclinic.telephone}</meta-data> 
        </property> 
    </contract> 
    <class name="Specialty" alias="${petclinic.specialty}" root="false"> 
        <property name="name"> 
            <meta-data>${petclinic.specialty}</meta-data> 
        </property> 
    </class> 

    <class name="Owner" alias="${petclinic.owner}" extends="person"> 
        <property name="firstName"> 
            <meta-data>${petclinic.firstName}</meta-data> 
        </property> 
        <property name="lastName"> 
            <meta-data>${petclinic.lastName}</meta-data> 
        </property> 
        <property name="address"> 
            <meta-data>${petclinic.address}</meta-data> 
        </property> 
        <property name="city"> 
            <meta-data>${petclinic.city}</meta-data> 
        </property> 
        <property name="telephone"> 
            <meta-data>${petclinic.telephone}</meta-data> 
        </property> 
        <reference name="petsInternal" ref-alias="${petclinic.pet}"  /> 
    </class> 
</compass-core-mapping> 
*.cpm.xml就是Object/Search Engine Mapping了。 我們也可以拿她當作同Hibernate中的*.hbm.xml來理解。他的作用就是提供了POJO到common meta data的映射
 package對應了POJO的包名,class對應了POJO類名,contract爲POJO中一些較爲Base類, property對應了POJO的屬性。
上面看到的像ANT中的${*}就是*.cmd.xml 中所定義的common meta data。
通常來說*.cmd.xml中的alias同POJO的Class進行映射。Meta data 同Class中的property進行映射
  • *.cfg.xml文件  

<compass-core-configuration> 
    <compass>   
        <setting name="compass.engine.connection">target/index</setting>       
        <meta-data resource="org/compass/sample/library/library.cmd.xml" />    
        <mappings> 
               <class name="test.Author" /> 
        </mappings> 
    </compass> 
</compass-core-configuration>
<setting name="compass.engine.connection">target/index</setting>    指定了索引文件存放的路徑。
<meta-data resource="org/compass/sample/library/library.cmd.xml" />  指定了*.cmd.xml文件存放的路徑。
<mappings><class name="test.Author" /></mappings>是對compass的mapping文件進行指定。Test.Author對應的文件是test/Author.cpm.xml.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章