第6章 OSEM – 对象/搜索引擎映射
6.1 介绍
Compass提供了把Java对象映射到搜索引擎中的功能,这是通过XML映射文件和Java5.0的Annotations来实现的。我们把这个技术称为OSEM(对象搜索引擎映射)。OSEM提供了一个非常丰富的语法来描述对象的属性和关系。通过Compass,OSEM文件/annotations从运行期的对象模型中抽象出需要的属性,然后把它们对应的元数据插入到搜索引擎索引中。
保存一个对象到搜索引擎的过程称为marshaling(列集),而从搜索引擎中检索一个对象的过程称为un-marshaling。正如5.2:“Alias, Resource and Property”中的描述,在搜索引擎的实现中,Compass使用了Resources。OSEM是marshaling和un-marshaling一个对象树到Resource的过程(简单的说,一个Resource就是一个映射)。
6.2 检索类
检索类是描述应用状态的类,它实现了业务模型的实体。Compass最适合POJO模式编程。现在,我们来看一个检索类的实例:
import java.util.Date;
import java.util.Set;
@Searchable
@SearchableConstant(name = "type", values = { "person", "author" })
public class Author {
private Long id; // identifier
private String name;
private Date birthday;
@SearchableId
public Long getId() {
return this.id;
}
private void setId(Long id) {
this.id = id;
}
@SearchableProperty(name = "name")
@SearchableMetaData(name = "authorName")
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@SearchableProperty(format = "yyyy-MM-dd")
public Date getBirthday() {
return this.birtday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
Author类采用Java5的annotations方式来进行映射。接下来,我们再看一个采用XML映射的例子:
<?xml version="1.0"?>
<!DOCTYPE compass-core-mapping PUBLIC
"-//Compass/Compass Core Mapping DTD 2.0//EN"
"http://www.compass-project.org/dtd/compass-core-mapping-2.0.dtd">
<compass-core-mapping package="eg">
<class name="Author" alias="author">
<id name="id" />
<constant>
<meta-data>type</meta-data>
<meta-data-value>person</meta-data-value>
<meta-data-value>author</meta-data-value>
</constant>
<property name="name">
<meta-data>name</meta-data>
<meta-data>authorName</meta-data>
</property>
<property name="birthday">
<meta-data format="yyyy-MM-dd">birthday</meta-data>
</property>
</class>
</compass-core-mapping>
Compass使用的应用对象是非侵入式,它必须具有以下规则:
l 实现一个默认的构造方法:Author有一个隐藏的(无参)构造方法。所有的持久类都必须有一个默认的构造方法。Compass Core中使用Constructor.newInstance()来构造实例。
l 提供属性标识符:在OSEM中,每个root级的检索类必须定义一个或多个属性来标识该类。
l 访问说明和变更(可选):虽然Compass能直接持久化实例变量,但Compass不推荐你这么做。Compass更认可JavaBean风格的实现方式。这种方式更清晰明了。
l 如果你想混用持久类中的对象(例如在一个Set中add不同的持久类),那么建议你重载equals()和 hashCode()。你能通过这些对象之间的标识符来实现这种混用,但得注意:使用代理标识符能使Compass工作得最好(将提供一个方法来自动生成它们)。因此,使用业务键来实现是最好的。
在上面的例子中,我们为Author类定义了映射。从中引入了Compass的映射概念和语法。在解释概念之前,弄清楚一些相关术语是很有必要的。
首先要明确的是Property的用法。因为Property作为一个java和Compass的概念(从表示搜索引擎和语义术语来看),它有共同的用法——特别注意的是其所带前缀的含义。一个类的property指的是一个Java类的属性。在Compass中,一个资源的property指的是搜索引擎元数据,它包含了这个映射类的property值。在前面的OSEM例子中,类property:“name”的值所映射的包含了两个资源property实例:name和authorname。
6.2.1 别名
在Compass中,每个映射定义都得注册一个别名。这个别名用于连接一个类和它的OSEM定义。在其他映射定义和直接使用Compass API时,别名也能被引用。当使用annotations映射时,别名就是该类的小写类名。
在Compass中,检索类有两种类型:root级和非root级。当一个类需要被单独搜索时,该类最好定义成Root级检索类。例如:在Customer类中,包含一个Name类,Customer能被单独查询,而Name仅仅是Customer中的一部分,所以Customer被定义成root级检索类,而Name被定义成非root级检索类(在配置文件中root=”false”)。另外一种考虑root级检索类的方式:最终编组到自己的资源的检索类。
非root级检索类不需要定义id映射。
6.2.3 子索引
默认情况下,每个root级的检索类都有其自身并以别名命名的子索引。子索引名是可控的。允许把几个root级的检索类加入到同一个子索引中。也可以在同一个子索引中使用不同的子索引散列函数。想了解更多内容,请阅读:5.8:子索引散列。
-----------------------------------------------------------------------------------------
注:“《compass-reference》翻译计划”
分享到:
相关推荐
compass-reference.pdf
mongodb-windows安装包: mongodb-compass-1.31.2-win32-x64.msi 打开直接安装
compass-reference,compass
mongodb官方客户端可视化工具compass-1.26.1-win32-x64
mongodb-compass-community-1.21.2-win32-x64.exe mongodb-compass-community-1.21.2-win32-x64.exe mongodb-compass-community-1.21.2-win32-x64.exe mongodb-compass-community-1.21.2-win32-x64.exe
MongoDB的讲义,资源包。与大数据hadoop学习相关,包含快速入手MongoDB和MongoDB集群安全两个部分,以及mongoDB的可视化工具zip包MongoDB-compass
Compass需要的包3:compass-core.jar
mongodb-compass-community-1.18.0-win32-x64.msi
前端开源库-compass-mixins指南针混音器,指南针样式表
最新版mongodb-compass-1.16.3-win32-x64
mongodb-compass-1.23.0-win32-x64.zip官网下载的mongodb界面管理工具
mongodb-compass-1.42.1-win32-x64.exe 数据库构建工具
compass-2.2.0.zip,Compass是第一个实现java搜索引擎的开源框架,它是基于Lucene之上的,提供更简单的搜索引擎API,事务支持,对象到搜索引擎映射
这个是mongodb-compass的1.23最新版本。花了我好长时间才下载完。各位请给我个赞 这个是mongodb-compass的1.23最新版本。花了我好长时间才下载完。各位请给我个赞 这个是mongodb-compass的1.23最新版本。花了我好长...
Pre-Processador-CSS --- Sass-Compass:Aplicaçãodopré-processadorSass com o框架Compass
sass与compass实战--源代码 下载地址:https://github.com/pengwynn/sass-and-compass-in-action
一般的方法是通过gem进行安装,而gem又依赖于Ruby环境,所以要先安装Ruby,然后安装sass和compass,compass的gem安装包下载
sass-compass-cli 构建Sass-compass项目的简单cli。 安装 先决条件:Node.js(> = 6.x,首选8.x),npm版本3+ npm install -g sass-compass-cli 用法 sass-compass new 例子 sass-compass new my-sass-study 安装...