本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7593506
建立时间:2006年5月29日




[OpenSymphony]compass学习笔记2--对象搜索引擎映射
软件技术

lhwork 发表于 2006/12/4 10:38:28

索引的对象遵循以下原则:实现默认的无参数构造器,不要是public的。便于compass采用Constants.newInstance()提供identifier,提供访问和设置方法建议重载equals和hashcode方法。建议以业务主键为参考。alias:每一个影射定义都注册了一个别名。这个别名用来联系类的osem定义和类本身。Root:在compass中有两类可搜索的类:root searchable和non-root searchable 类。root searchable类最好定义作为hits结果返回的类。non-root searchable类不要求定义id影射。子索引:默认情况下,每一个root searchable类都有自己的子索引,名称缺省为alias。子索引的名称也可以自由控制。允许几个root searchable类索引到相同的子索引中。或者用子索引hash功能。searchable id不要求定义搜索的元数据,如果没有定义,compass自动创建内部的元数据id。如果searchable id不需要被搜索,那么需要为它定义一个可搜索元数据。注意下面的元数据定义方式:@Searchablepublic class Author {@SearchableId(name = "id")private Long id;// ...}@Searchablepublic class Author {@SearchableId@SearchableMetaData(name = "id")private Long id;//Searchable Constant:允许对一个类定义一系列的的常量数据。对于添加静态元数据是非常有用的。<constant><meta-data>type</meta-data><meta-data-value>person</meta-data-value><meta-data-value>author</meta-data-value></constant>Searchable Dynamic Meta Data:允许将表达式的结果保存到搜索引擎中。该影射不能影射任何类属性。动态元数据的值是根据动态转换器计算表达式得到的。compass内建了比如 el,jexl,velocity,ognl,groovy等转换器。当定义表达式后。root 类被注册为data key下的值。<dynamic-meta-data name="test" converter="jexl">data.value + data.value2</dynamic-meta-data>Searchable Reference:映射root类和其它类之间的关系。在marshals的过程中,只marshal参考对象的id。但是在unmarshal过程中根据id装载参考的对象。compass在参考对象上不执行任何级联操作,也不提供延迟加载。<class name="A" alias="a"><id name="id" />OSEM - Object/Search Engine MappingCompass - Java Search Engine 40<reference name="b" /><!-- ... --></class><class name="B" alias="b"><id name="id" /><!-- ... --></class>Searchable Component:嵌入一个可搜索类到本身的搜索类中。组件参考搜索类能够设置为 Root。为Root的组件一般都是具有id属性。比如人员和姓名组件(non-root),人员和帐户(root)。<class name="A" alias="a"><id name="id" /><component name="b" /><!-- ... --></class><class name="B" alias="b" root="false"><!-- ... --></class>继承处理:<class name="A" alias="a"><id name="id" /><property name="aValue"><meta-data>aValue</meta-data></property></class><class name="B" alias="b" extends="a"><property name="bValue"><meta-data>aValue</meta-data></property></class>Root 类有自己的索引,而依赖Root类的非Root类不需要索引。Class mapping能够继承其它class mapping(可以超过一个)。也能够继承contract mapping。contract:相当于java语言中的接口。如果有几个相同的类具有相似的属性。就可以定义一个contract。然后在子类中extend该contract。


阅读全文(3486) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.329 second(s), page refreshed 144781925 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号