第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 2.1.0 版本的参考手册,详细介绍了如何配置和使用 Compass 进行搜索和索引操作。 #### 使用指南 - **Lucene**:Compass 基于 Lucene 构建,因此了解 Lucene 的基础知识对于使用 Compass 至关重要...
mongodb-windows安装包: mongodb-compass-1.31.2-win32-x64.msi 打开直接安装
compass-reference,compass
mongodb可视化管理mongodb-compass-1.43.0-win32-x64.exe mongodb compass官网下载地址:https://www.mongodb.com/try/download/compass mongodb相关下载地址: mongodb社区版:...
"mongodb-compass-1.27.1-win32-x64.zip"是一个针对Windows 64位系统的MongoDB Compass版本的压缩包。 MongoDB Compass的核心功能包括: 1. **数据可视化**:它提供了一个直观的界面来查看和理解数据库的结构,...
在“mongodb-compass-community-1.16.4-win32-x64.zip”这个压缩包中,包含了MongoDB Compass的社区版,它可以帮助用户直观地查看和操作MongoDB数据库。以下是压缩包内各个文件的作用: 1. **snapshot_blob.bin**:...
mongodb-compass-1.42.1-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-compass-community-1.21.2-win32-x64.exe
在这个版本"mongodb官方客户端可视化工具compass-1.26.1-win32-x64"中,我们关注的是Windows 32位和64位系统的版本。 Compass的主要功能包括: 1. 数据浏览:它允许用户以表格、图表或者JSON格式查看和编辑数据,...
该项目是Compass-CI开源持续集成软件的设计源码,集成了Ruby、Shell、Python、HTML...Compass-CI为开发者提供对GitHub、Gitee、Gitlab等平台开源软件的测试、登录、故障诊断和分析服务,旨在提高软件开发和维护的效率。
Compass需要的包3:compass-core.jar
mongodb-compass-community-1.18.0-win32-x64.msi
Compass全文检索系列之一:Compass入门 在IT领域,全文检索已经成为数据分析和信息检索的重要技术,尤其是在大数据时代。本文将介绍Compass,一个基于Lucene的全文搜索引擎库,为Java开发者提供了一种简单易用的...
Compass Mixins 是一个非常重要的前端开发工具,尤其在 Sass(Syntactically Awesome Style Sheets)环境中,它极大地提升了CSS编写效率和代码复用性。这个开源库为开发者提供了丰富的预定义混合(mixins),帮助...
"mongodb-compass-1.23.0-win32-x64.zip" 是一个针对Windows 32位和64位系统的MongoDB Compass版本的压缩包,用户可以从官方网站下载此版本来安装和使用。 MongoDB Compass的核心功能包括: 1. 数据浏览:提供可视...
最新版mongodb-compass-1.16.3-win32-x64
7. **性能优化**:Compass对Lucene进行了优化,例如通过内存映射文件和缓存技术提高检索速度,同时提供索引分片和复制策略,以适应大规模的数据和高并发环境。 8. **多语言支持**:Compass能够处理多种语言的文本,...
"Compass-master.zip"提供的资源正是这样一个项目,它不仅能够准确地指示方向,还具备显示气压和海拔高度的功能,这对于户外爱好者或者需要导航的用户来说非常有用。下面我们将深入探讨这款应用的核心知识点。 1. *...