使用领域模型(domain object)来进行索引、搜索

对于讲domain object 映射到关系型数据库中,hibernate等持久性框架做了很多的工作,使得业务逻辑只需要和hibernate等持久层进行交互,而不需要直接和具体的数据库进行交互。

这给程序员带来了很大的方便,在业务逻辑处理上,只要针对domain object就可以。

使用Lucene进行索引、搜索开发的的时候,最经常碰到的概念就是Document 和Field,在程序中一个不得不去做的事情,就是将领域对象的属性映射到document的field中去,在搜索的时候,还要根据document和field来构建DTOs(Data transfor object)来返回给web层。这点和EJB的一个缺点很类似,返回给web层的不能是实体Bean,而是对实体Bean进行封装了的DTO。

我们希望的是有类似POJO的技术带来的便利一样,持久化的是domain object,返回给web层的也是也是domain object。

我们在对domain object进行索引和搜索的时候,也希望能够直接在domain object的层面进行操作,而不是直接去和document和field打交道。而我们利用compass框架就可以做到这样。

Compass是使用了Lucene的搜索引擎框架,它提供了一套开源的、高性能的、可以灵活配置的搜索框架,可以为用户的应用程序提供搜索功能。它还能与Spring、Hibernate等已有的框架进行整合。

Comapss的API结构和hibernate非常的相似,如果使用过hibernate的程序员使用comapass,基本上对API就很得心应手。

我们来看一个例子

CompassConfiguration config = new CompassConfiguration().configure();
Compass compass = config.buildComapss();
CompassSession session = compass.openSession();
CompassTransaction tx = null;
try
{
  tx = session.beginTransaction();
  Book book = new Book();
  book.setName("C++编程思想");
  book.setAuthor(”Bruce Eckel“);
  session.save(book);
  tx.commit();
}catch(Exception e)
{
  if(tx!=null)
  {
    tx.rollback();
  }
}finally
{
  session.close();
}

Hiberanete的程序员对上面的代码应该是非常的熟悉吧,compass完全让你远离了Lucene的API,让你的代码更专注与业务逻辑,而把索引和搜索的事情都交给compass吧。这点还带来了一个优点,就是利用compass很容易的给已有的系统增加搜索的功能。

那么如何让domain object被compass使用呢,当然和hibernate一样,只要完成一些domai object的配置文件就可以了,具体的可以阅读compass附带的example。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hibernate
, 框架
, object
, 搜索
, compass
, compassSession
domain
js object 索引、搜索索引、目录索引搜索引擎、搜索引擎索引、目录索引类搜索引擎,以便于您获取更多的相关知识。

时间: 2024-11-08 17:19:34

使用领域模型(domain object)来进行索引、搜索的相关文章

eclipse上依据hibernate tools逆向生成PO(Domain Object)的过程

使用eclipse开发一个基于java的maven的web项目,业务逻辑基于spring实现,数据库服务器采用mysql.我们项目的业务逻辑(面向对象)和数据(关系型数据库)之间,依靠hibernate进行映射.对应.使用和处理.hibernate的核心功能之一,就是在面向对象和关系型数据库之间建立转化和映射,让程序员用面向对象的方式看待关系型数据库.(让数据库对程序员透明)开发过程中,为了保持二者的一致,需要进行Domain Object这种POJO的逆向生成.也就是依据mysql数据库中数据

在ASP中模糊搜索及索引搜索的占用资源差别

通过在ASP编程中,我们很容易看到两种搜索查询方式,如下: sql="select id from b where id="&idsql="select id from b where id like '%"&id&"%' " 可以说这两种查询方式的差别很大,或者说及其及的大! 1. 直接按id查询  可能都不需要时间  2. 模糊查询  根据该字段的内容 和数据库的量来决定  效率很低你的 比如按id模糊查询  如果 是

xcode object c-判断是搜索NSString最后一位是否为“.”,如果是就删除,但是不知道用什么方法?

问题描述 判断是搜索NSString最后一位是否为".",如果是就删除,但是不知道用什么方法? 下面为我编写的一个简易的计算器对"."来判断, 我不知道在下面用什么方法来取删除我 找出来的最后一位的这个小数点. 比如5. 我要删除5后面这个小数点. if (![num1 hasSuffix:@"."]) { num1 = [num1 ??????]: //num1 全部的变量 设置的nsstring display.text = num1; //

求高手解决Lucene索引搜索,为啥名字可以但是换成价格区间就不可以了啊

问题描述 publicPaginationsearchPage(Directorydir,StringqueryString,LongwebId,LongctgId,LongstoreId,DoublebeginPrice,DoubleendPrice,Datestart,Dateend,intpageNo,intpageSize)throwsCorruptIndexException,IOException,ParseException{Searchersearcher=newIndexSea

android仿微信通讯录搜索示例(匹配拼音,字母,索引位置)

前言: 仿微信通讯录搜索功能,通过汉字或拼音首字母找到匹配的联系人并显示匹配的位置 一:先看效果图 字母索引 搜索匹配 二:功能分析 1:汉字转拼音 通讯录汉字转拼音(首个字符当考虑姓氏多音字), 现在转换拼音常见的有pinyin4j和tinypinyin, pinyin4j的功能强大,包含声调多音字,tinypinyin执行快占用内存少, 如果只是简单匹配通讯录,建议使用tinypinyin,用法也很简单这里不详细介绍 拼音类 public class CNPinyin <T extends

SQL2005CLR函数扩展 - 关于山寨索引

本文只是一个山寨试验品,思路仅供参考. --------------------------------------------------------------------------------原理介绍:索引建立 目 录结构划分方案也只是很简易的实现了一下,通过unicode把任意连续的两个字符(中文或英文)分为4个字节来做四层目录,把索引的内容对应的主关键字 (主要为了使用sql索引和唯一性)作为文件名,两个字符在索引内容中的位置作为文件后缀来存储.文件本身为0字节,不保存任何信息. 比

十大高明的Google搜索技巧

前言:多数人在使用Google搜索的过程是非常低效和无谓的,如果你只是输入几个关键词,然后按搜索按钮,你将是那些无法得到Google全部信息的用户,在这篇文章中,Google搜索专家迈克尔.米勒将向您展示如何更智能.更高效地进行Google的系列搜索. Google是一个非常精密成熟的搜索引擎,但大多数的用户都没有能完全地利用到它的能力.一般人就是在Google的搜索框中输入一两个关键字,然后点击"搜索"按钮,等着Google显示出它第一页的搜索结果.这是一个相当简单模式匹配算法的搜索

SQL2005CLR函数扩展 - 关于山寨索引_mssql2005

本文只是一个山寨试验品,思路仅供参考. --------------------------------------------------------------------------------原理介绍:索引建立 目录结构划分方案也只是很简易的实现了一下,通过unicode把任意连续的两个字符(中文或英文)分为4个字节来做四层目录,把索引的内容对应的主关键字(主要为了使用sql索引和唯一性)作为文件名,两个字符在索引内容中的位置作为文件后缀来存储.文件本身为0字节,不保存任何信息. 比如一

InnoDB 中文参考手册 --- 11 表和索引结构

参考|参考手册|索引|中文 InnoDB 中文参考手册 --- 犬犬(心帆)翻译 11 表和索引结构MySQL 在数据库目录下的 .frm 文件中存储它的数据字典信息.但是每个 InnoDB 类型表也同样在 InnoDB 表空间内的内部的数据字典中存在它自己的进入点.当 MySQL 移除(drop) 一个表或一个数据库时,它将同时删除 .frm 文件,以及在 InnoDB 的数据字典中相对应的进入点.这就是为什么不能通过简单的删除 .frm 文件为移除数据库中的 InnoDB 类型表的原因,以及