2.2.1.2.3.1 Book.cpm.xml
映射文件中元素分析:
1、 类别名
l 每个检索类在通用元数据定义文件中都应该有对应描述。
<class name="Book" alias="${library.book}">
alias属性所对应的值起到了一个映射作用。它将一个实体与这个实体的元数据定义连接起来。该元数据定义在.cmd.xml文件中。
在library.cmd.xml文件中对应的:
<alias id="book" displayName="Book">
<description>Book alias</description>
<uri>http://compass/sample/library/alias/book</uri>
<name>book</name>
</alias>
很显然,其中使用了3个元数据来定义这个检索类。它们分别是<description>、<uri>和<name>。
2、<id name="id" />。
每一个root级的检索类至少有一个索引id。可以用annotation和xml配置的方式注册该索引id。如果没有注册,compass会默认给一个内部id。
3、property
<property name="keywords">
<meta-data boost="2">${library.keyword}</meta-data>
</property>
l Property对应检索类中的域。
l 每个索引域在通用元数据定义文件中都应该有对应的别名。
其中meta-data中的boost=2是指多重引导关系(= bootstrap)。
2.2.1.2.3.2 Author.cpm.xml
1、<constant>
用<constant>可以构建索引常量。可以在类中用annotation的方式注入,也可以在xml文件中定义。
索引常量的xml定义方式:在一个索引实体的映射文件中通过<constant>定义一个常量名,并用一列值与之对应。
<constant>
<meta-data>${library.type}</meta-data>
<meta-data-value>${library.type.mdPerson}</meta-data-value>
<meta-data-value>${library.type.mdAuthor}</meta-data-value>
</constant>
结合通用元数据定义文件,我们可以翻译一下,结果如下:
<constant>
<meta-data>type</meta-data>
<meta-data-value>person</meta-data-value>
<meta-data-value>author</meta-data-value>
</constant>
由此可以得到一个索引常量元数据:type,它有2个对应的值:person和author。
2、<component>和<reference>
<component name="name" ref-alias="${library.article}" />
该类中定义了三个与Author关联的类或者由类组成List。
private Name name;
private List articles = new ArrayList();
private List books = new ArrayList();
其中Article属于非root型的检索类,而Name是属于辅助类,所以它们跟Author之间的关系都是:component。而Book是root型的检索类,它跟Author之间的关系只能是:reference。
不能单独搜索Article和Name,必须通过Author来调用它们。
注:很明显该映射文件的以下部分设置有误:
<component name="name" ref-alias="${library.name.md}" />
应该改成:<component name="name" ref-alias="${library.name}" />
至于为什么配置错了还不影响结果,没有仔细看其源代码,所以不得知。有人明白其中道理的,不妨一说,愿洗耳恭听:)
2.2.1.2.3.3 Article.cpm.xml
1、<class>
<class name="Article" alias="${library.article}" root="false">
其中root="false"的含义:
root属性是用于标识该实体是否为一个可以被独立查找的检索实体。当该属性的值为true时,用户可以直接通过关键字的查找来得到这样的实体信息;若该属性的值为false,用户使用相同的关键字进行搜索,只能得到该实体所依附的真正实体的实体。这时,需要再通过该真正实体的实例,进一步获取所需要的实体。
本例来看,用户可以通过输入关键字在Compass进行查找,最终找到Author和Book这样的实体对象,却不可以直接得到Article这个对象。因为Article的root属性为false。如果需要取得Article的实例,则只能先取得Author的实例,进而通过Author中的articleList,来获取Article的对象。
<class>的root属性默认为true。
2.2.1.2.4 通用元数据定义文件
1、概述
Library.cmd.xml文件中的cmd是Common Metadata Definition的缩写。其中,元数据是用于描述数据的数据。在该文件中,存储了一些与实体相关的元数据信息。同时,在*.cpm.xml文件中,所有被使用到的变量都在这里有明确的定义。即那些通过${library.*}调用的。
2、uri
在该定义文件中<meta-data>的uri是可以重复的,例如以下2个定的uri是相同的:
<alias id="name" displayName="Name">
<description>Name alias</description>
<uri>http://compass/sample/library/alias/name</uri>
<name>name</name>
</alias>
---------------------------------------------------
<meta-data id="isbn" displayName="ISBN">
<description>ISBN of the book</description>
<uri>http://compass/sample/library/name</uri>
<name>name</name>
</meta-data>
2.2.1.2.5 测试类
通过测试类,我们可以了解Compass索引建立和检索的全过程。
对于test*()方法我们就不作主要关注,那些都是单元测试的方法。不过,这也算是提供了写compass应用时的单元测试范例。
我们从main方法进入,看看compass运行的过程:
分享到:
相关推荐
在实际应用中,我们可以按照以下步骤来使用Compass: 1. **安装与依赖**:将Compass库添加到项目中,根据所使用的ORM框架选择相应的版本。 2. **配置ORM集成**:配置Compass与ORM框架的连接,指定数据源和索引存储...
【Compass原理深入学习笔记】 Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 ...
【标题】"Compass简单学习"所涉及的知识点主要集中在两个方面:一是对Compass工具的理解,二是如何使用Compass进行源码分析和开发辅助。Compass是一个强大的样式表(CSS)编译器,它基于Sass语言,帮助开发者更高效...
通过这个 "compass2简单例子",你可以学习如何创建一个新的 Compass 项目,编辑 `config.rb` 文件,编写 Sass 代码,然后使用 Compass 命令编译成 CSS。同时,你还可以看到 Compass 如何简化 CSS 开发,特别是通过其...
《深入探索Lucene+Compass技术与Ajax应用》 在当今的互联网开发中,数据检索和实时交互性已经成为不可或缺的功能。Lucene作为一个强大的全文搜索引擎库,为开发者提供了高效的文本搜索能力;Compass作为Lucene的一...
Compass概念: 1:Compass相当于hb的SessionFactory 2:CompassSession相当于hb的Session 3:CompassTransaction相当于hb的transaction。 <br>Compass也是采用CompassConfiguration(装载配置和映射文件...
Compass基于Lucene之上,类似于Hibernate之于JDBC的关系,提供了更高层次的封装,使得开发者能够更容易地集成搜索引擎到Java应用程序中。 - **OSEM**:OSEM (Object Search Engine Mapping) 是Compass提供的一个...
Compass全文搜索是一个基于Apache Lucene的高性能、易用的全文搜索引擎工具。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索的基本功能。而Compass则在Lucene的基础上进行了封装,使得开发者可以更方便地...
通过查阅这两个文件,你可以深入理解Lucene的索引和搜索机制,以及Compass是如何在Lucene之上提供更高级别的抽象和便利的。 总的来说,这个压缩包是一个全面的Compass和Lucene学习资源,不仅提供了实践项目,还有...
3. **jar包**:项目依赖的各种库,包括Compass、Lucene、SSH框架和其他必需的第三方库。 4. **SQL脚本**:用于初始化数据库的脚本,可能是数据表结构或初始数据的导入。 5. **Web应用目录**:可能包含WEB-INF目录,...
Compass 是一个强大的开源搜索引擎框架,它建立在 Lucene 的基础之上,为 Java 开发者提供了更为简洁的搜索引擎 API。Compass 的设计目标是简化搜索引擎的集成,使其能够无缝地与现有的应用程序,如 Hibernate 和 ...
#### 二、Compass 与 Lucene 和 Hibernate 的关系 ##### 2.1 Lucene 简介 - **Lucene** 是一个高性能的全文检索引擎库,支持文本索引和查询。 - **优点**:灵活高效,适用于大量数据的全文检索。 - **缺点**:直接...
Compass和WellPlan学习总结 Compass和WellPlan是油气行业中的两个重要工具,用于油气井的设计、规划和实施。下面是Compass和WellPlan学习总结的知识点: 1. 井设计基本概念:井设计是油气井的核心部分,涉及到井的...
### Compass与Lucene知识点详解 #### Lucene简介 **Lucene**是一款优秀的、成熟的、开源的、纯Java语言编写的全文检索工具包。它提供了一种高性能的方式来进行文本的索引和搜索,使得开发者能够在应用中轻松实现...
虽然Compass主要用于Web开发,但考虑到跨平台的趋势,也可能有开发者尝试将其理念和方法应用到Android UI的设计中,通过自定义视图或第三方库实现类似的功能。 Compass的另一个重要特性是其对浏览器兼容性的处理。...
在Node.js学习过程中,MongoDB和Compass的结合使用可以帮助你更好地理解和操作数据库。通过Node.js的MongoDB驱动,你可以编写JavaScript代码来与MongoDB交互,创建和查询集合,执行CRUD(创建、读取、更新、删除)...
MongoDB Compass是MongoDB官方提供的一款图形化管理工具,它为MongoDB数据库的使用者提供了直观的界面,方便进行数据浏览、查询、操作以及性能分析。MongoDB Compass 1.15.1是这个系列的一个版本,它无需安装,可以...
对于初学者,可以从以下方面开始学习Compass: 1. 熟悉Sass基础语法,包括变量、嵌套规则、混合、函数等。 2. 学习Compass的核心概念,如网格系统、样式库和混入。 3. 实践创建简单项目,应用Compass的功能来编写...