`
GodIT
  • 浏览: 6439 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

compass自动扫描

 
阅读更多

bean.xml的配置:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<aop:aspectj-autoproxy/>
	<context:component-scan base-package="cn.itcast"/>	
    <!--  使用数据源和指定persistence.xml位置的方式创建entityManagerFactory,如果使用的不是hibernate JPA实现,
    需要在tomcat作一些特殊配置.具体参考手册
    注意:使用该方式需要把persistence.xml中的hibernate.connection.driver_class,hibernate.connection.username,hibernate.connection.password,hibernate.connection.url配置删除
   -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${driverClass}"/>
		<property name="jdbcUrl" value="${jdbcUrl}"/>
		<property name="user" value="${user}"/>
		<property name="password" value="${password}"/>
		<!-- 初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3  -->
		<property name="initialPoolSize" value="1"/>
		<!-- 连接池中保留的最小连接数。 -->
		<property name="minPoolSize" value="1"/>	
		<!-- 连接池中保留的最大连接数。Default: 15  -->
		<property name="maxPoolSize" value="300"/>
		<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0  -->
		<property name="maxIdleTime" value="60"/>	
		<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3  -->
		<property name="acquireIncrement" value="5"/>	
		<!-- 每60秒检查所有连接池中的空闲连接。Default: 0  -->
		<property name="idleConnectionTestPeriod" value="60"/>
	</bean>

	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
		<property name="loadTimeWeaver">
	          <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
	    </property>
	</bean> 
	
   <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
   </bean>
   
   <tx:annotation-driven transaction-manager="transactionManager"/>
   
   <bean id="compass" class="org.compass.spring.LocalCompassBean">
		<property name="classMappings">
			<list>
				<value>cn.itcast.bean.product.ProductInfo</value>
				<value>cn.itcast.bean.product.Brand</value>
				<value>cn.itcast.bean.product.ProductStyle</value>
				<value>cn.itcast.bean.product.ProductType</value>
			</list>
		</property>
		<property name="compassSettings">
			<props>
				<prop key="compass.engine.analyzer.default.type">net.paoding.analysis.analyzer.PaodingAnalyzer</prop>
				<prop key="compass.engine.connection">file://d:/index</prop>
				<!-- 在内存中建立索引
				<prop key="compass.engine.connection">ram://index</prop>
				-->
				<prop key="compass.engine.highlighter.default.formatter.simple.pre"><![CDATA[<font color='red'>]]></prop>
				<prop key="compass.engine.highlighter.default.formatter.simple.post"><![CDATA[</font>]]></prop>
				<prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
			</props>
		</property>
		<property name="transactionManager" ref="transactionManager" />
	</bean>

	<!-- 自动完成 索引的添加/更新/删除操作-->
	<!-- 创建org.compass.gps.impl.SingleCompassGps 对象是,start 这个方法启动实体的接听. -->
	<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
		<property name="compass" ref="compass" />
		<property name="gpsDevices">
			<list>
				<!-- 设置JPA驱动 -->
				<bean class="org.compass.gps.device.jpa.JpaGpsDevice">
						<property name="name" value="jpaDevice" />
						<property name="entityManagerFactory" ref="entityManagerFactory" />
						<property name="injectEntityLifecycleListener" value="true"/>
				</bean>
			</list>
		</property>
	</bean>	
</beans>


paoding分词器的应用:
1、考入jar包
2、把dic目录( dictionary) 拷贝到src目录下。
3、paoding-dic-home.properties 拷贝到 src目录下



搜索的应用:
package cn.itcast.service.product;

import cn.itcast.bean.QueryResult;
import cn.itcast.bean.product.ProductInfo;

public interface ProductSearchService {
	/**
	 * 搜索商品
	 * @param keyword 关键字
	 * @param firstResult 开始索引
	 * @param maxResult 每页获取的记录数
	 * @return
	 */
	public QueryResult<ProductInfo> query(String keyword, int firstResult, int maxResult);

} 


package cn.itcast.service.product.impl;

import javax.annotation.Resource;

import org.compass.core.Compass;
import org.compass.core.CompassTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bean.QueryResult;
import cn.itcast.bean.product.ProductInfo;
import cn.itcast.service.product.ProductSearchService;

@Service @Transactional
public class ProductSearchServiceBean implements ProductSearchService {
	private CompassTemplate compassTemplate;
	
	@Resource
	public void setCompass(Compass compass){
		this.compassTemplate = new CompassTemplate(compass);
	}
	
	public QueryResult<ProductInfo> query(String keyword, int firstResult, int maxResult){
		return compassTemplate.execute(new QueryCallback(keyword, firstResult, maxResult));
	}
}
 

package cn.itcast.service.product.impl;

import java.util.ArrayList;
import java.util.List;

import org.compass.core.CompassCallback;
import org.compass.core.CompassException;
import org.compass.core.CompassHits;
import org.compass.core.CompassQueryBuilder;
import org.compass.core.CompassSession;
import org.compass.core.CompassQuery.SortDirection;
import org.compass.core.CompassQuery.SortPropertyType;

import cn.itcast.bean.QueryResult;
import cn.itcast.bean.product.ProductInfo;

public class QueryCallback implements CompassCallback<QueryResult<ProductInfo>> {
	private String keyword;
	private int firstResult;
	private int maxResult;

	public QueryCallback(String keyword, int firstResult, int maxResult) {
		this.firstResult = firstResult;
		this.maxResult = maxResult;
		this.keyword = keyword;
	}

	public QueryResult<ProductInfo> doInCompass(CompassSession session) throws CompassException {
		/*查询指定类别的匹配记录,并按position降序排序
		 CompassQueryBuilder queryBuilder = session.queryBuilder();
		 CompassHits hits = queryBuilder.bool()
		 	.addMust(queryBuilder.spanEq("typeid", typeid))
	 		.addMust(queryBuilder.queryString(keyword).toQuery())
	   		.toQuery().addSort("position", SortPropertyType.FLOAT, SortDirection.REVERSE)
	   		.hits();//sql: typeid=1 and (xxxx like ?) order by positoin desc
		 */
		CompassHits hits = session.find(keyword);//5
		QueryResult<ProductInfo> qr = new QueryResult<ProductInfo>();
		qr.setTotalrecord(hits.length());//获取匹配记录的总数
		int length = firstResult + maxResult;
		if(length>hits.length()) length = hits.length();
		List<ProductInfo> products = new ArrayList<ProductInfo>();
		for(int i = firstResult ; i < length ; i++){
			ProductInfo product = (ProductInfo)hits.data(i);
			if(hits.highlighter(i).fragment("productName")!=null)
				product.setName(hits.highlighter(i).fragment("productName"));
			if(hits.highlighter(i).fragment("description")!=null)
				product.setDescription(hits.highlighter(i).fragment("description"));
			products.add(product);
		}
		qr.setResultlist(products);
		return qr;
	}

}

 

 

分享到:
评论

相关推荐

    compass annotation关联关系

    通过在 Java 类或其属性上添加特定的注解,Compass 可以自动处理对象到索引的转换和反转换,减少了手动配置的复杂性。 二、主要 Annotation 1. @Searchable:用于标记整个类,表示该类是一个可被搜索的实体。 2. @...

    compass对象搜索引擎

    Compass支持实时索引,这意味着当数据库中的数据发生变化时,无需重启服务,索引会自动更新,保持与数据库的一致性。 9. **插件系统** Compass有一个强大的插件系统,可以扩展其功能,例如支持更多的数据源、新的...

    效率源Data Compass RAID 5EE 数据恢复案例教程-自动设置方式.doc

    【效率源Data Compass RAID 5EE 数据恢复案例教程-自动设置方式】 本教程主要介绍了如何使用效率源Data Compass工具恢复RAID 5EE (Enhanced)级别的数据,以及RAID的基本概念、分类及其特点。 一、RAID简介 RAID...

    Kill_kavo

    5. **自动更新**:保持最新的病毒库,以应对不断演变的恶意软件。 不过,具体"Kill_kavo"工具的细节和操作方式,需要查看其实际的使用指南或相关文档。在处理未知的或可疑的USB设备时,始终要谨慎行事,并确保遵循...

    SnowField:SnowField雪原:Python代码静态突破扫描器

    同时,结合持续集成/持续部署(CI/CD)流程,可以在每次代码提交时自动运行SnowField,确保代码质量始终保持在较高水平。 总的来说,SnowField雪原作为一款Python代码静态扫描器,是保障代码安全和质量的重要工具,...

    移动式激光自动测量系统 (2013年)

    3. **卫星罗经(Satellite Compass)**:为系统提供精确的位置信息。 4. **倾角传感器**:监测并调整系统的水平状态,保证测量准确性。 #### 系统结构 - **第一层**:由供电系统、升降平台和载车组成,提供系统...

    Chrome-Cut:用于扫描,检测和控制Chromecast设备的Python3工具-开源

    基本的GUI,使用Python 3.4和QT5编程的CLI工具。 它使您能够检测,扫描并将一些有用的HTTP请求“命令”发送到无数... 以及循环命令的功能,使重复命令的过程将在设定的持续时间内自动执行,在该持续时间内将完成循环。

    html_toc:在 HTML 文档中自动生成目录

    如果找到标签, #process 会扫描位于提供范围内的标头标签。 如果匹配的标头还没有 id 属性,则会添加一个。 如果找不到匹配的标题,则删除伪标签并返回修改后的源文本。 如果找到标头,则为每个匹配标头生成一个...

    [MongoDB权威指南].(美).霍多罗夫.(美).迪洛尔夫.(译)程显峰.扫描版

    - **主键(_id)**:每个文档都有一个唯一的_id字段作为主键,MongoDB会自动为每个新文档分配一个ObjectId类型的_id值。 #### 三、MongoDB架构 - **单服务器部署**:最简单的部署方式,适合于开发环境或小型应用。...

    实际的开发中所需要用到的一些小软件,可以提高开发的效果

    6. **数据库管理**: MySQL Workbench,Navicat,MongoDB Compass 等数据库管理工具,提供了图形化界面,便于查询、设计和管理数据库。 7. **项目管理工具**: JIRA、Trello 和 Asana 可以帮助团队规划任务,跟踪进度...

    web开发工具

    数据库管理工具,如MySQL Workbench、phpMyAdmin和MongoDB Compass,用于数据存储和查询,确保数据的安全性和可操作性。 版本控制系统,如Git,是协同开发的核心工具,它允许团队成员同时工作,合并代码,并追踪...

    mybatis-plus-demo:mybatis-plus与springboot starter进行代码自动生成demo

    2. 在SpringBoot项目中创建一个启动类,引入`@MapperScan`注解,扫描Mapper接口。 3. 编写实体类,通过注解`@TableId`、`@TableField`等来指定主键和字段信息。 4. 使用MyBatis-Plus提供的代码生成器类,如`...

    mongoDB入门到精通.txt

    2. **工具**:提供图形界面工具如Robo 3T、MongoDB Compass等,方便数据管理和查询。 3. **社区与支持**:拥有活跃的社区论坛和技术支持团队,为用户提供帮助和资源。 通过以上知识点的学习,可以全面掌握MongoDB的...

    mongodb权威指南

    4. 复制集:MongoDB的复制集功能允许数据自动同步到多个服务器上,这样即使一台服务器发生故障,其他服务器也能继续提供服务,增加了系统的可用性和数据的安全性。 5. 分片:为了应对大量数据存储和高并发读写的...

    iPhone5主板原理图

    文件中也提到了加速度计(ACCEL)、陀螺仪(GYRO)、指南针(COMPASS)以及扬声器放大器(SPKAMP)。这些传感器在智能手机中负责各种运动感知功能,比如方向检测、计步、自动屏幕旋转等。 H5P相关的缩写可能指的是...

    Using Robots and SLAM for Indoor Wi-Fi Mapping in Indoor Geolocation

    本研究项目旨在比较人力收集和机器人收集的Wi-Fi数据库在室内定位系统中的性能,同时与市面上现有的商业系统(如Wi-Fi Compass、Google Maps等)进行对比,判断机器人是否可以替代人类进行此类数据收集。 项目报告...

    Mon go DB权威指南 第2版

    - **管理工具**: 如MongoDB Compass图形界面管理工具,简化了数据库的操作和监控工作。 - **云服务**: MongoDB Atlas是MongoDB官方提供的云数据库服务,支持自动备份、监控等功能。 #### 实战案例分析 本书还包含...

    email-solution

    病毒和恶意软件扫描工具 :具有自动更新和第三方签名数据库的开源邮件网关扫描软件。 垃圾邮件过滤工具 :具有SPF,DKIM,DMARC DNS黑名单,URL黑名单,灰名单功能的高级垃圾邮件过滤系统 邮件列表功能由Postfix...

    50 Tips and Tricks for MongoDB

    MongoDB提供多种工具和方法来监控数据库性能,比如通过Web界面的MongoDB Compass,或者命令行工具mongostat和mongotop。及时发现和解决系统中的瓶颈和问题可以提升数据库的稳定性和可用性。 知识点十二:应用集成和...

    mongodb+spring+maven环境搭建

    在MongoDB中,可以通过命令行或者可视化工具(如MongoDB Compass)来操作数据库。 3. **添加Maven依赖**:在你的项目中,使用Maven来管理MongoDB和Spring的相关依赖。在`pom.xml`文件中,你需要添加`mongodb-driver...

Global site tag (gtag.js) - Google Analytics