路由基本概念和命令介绍
2010-10-03 14:30
501 查看
Spring3.1, Hibernate3.6,Lucene3.0.3以及IKAnalyzer3.2.3, 数据库采用Mysql,连接池采用dbcp.主要Jar如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201010/b1529df9733be21e131999981979c48e.jpg)
Spring重要Bean配置:
Lucene工具类:
建立索引的方法:
对增量数据循环建立索引:
主要代码以备忘。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201010/b1529df9733be21e131999981979c48e.jpg)
Spring重要Bean配置:
<!--配置定时任务 --> <bean id="bagnetTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="bagnetJob" /> </property> <property name="targetMethod"> <value>runJobs</value> </property> <!-- keep the job from running while the previous one hasn't finished yet --> <property name="concurrent" value="false" /> </bean> <!--配置定时任务触发器 --> <bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="bagnetTask" /> </property> <!-- every 10 mins in the working day from 9:00 to 19:00 we create/update index --> <property name="cronExpression"> <value>0 0/10 9-19 *,* * ?</value> </property> </bean> <!-- 定时调用的Scheduler--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="jobTrigger" /> </list> </property> </bean> <!-- 事务管理器 --> <bean id="transactionManger" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 配置事务拦截器--> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref bean="transactionManger" /> </property> <!-- 下面定义事务传播属性--> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="do*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 自动代理 --> <bean id="autoBeanNameProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Service</value> </list> </property> <property name="interceptorNames"> <list> <idref local="transactionInterceptor" /> </list> </property> <!-- 这里的配置是必须的,否则无法完成代理的类型转化 这是使用CGLIB来生成代理 --> <property name="proxyTargetClass" value="true" /> </bean>
Lucene工具类:
package com.dx.bags.util; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.wltea.analyzer.lucene.IKAnalyzer; public class LuceneUtil { private static LuceneUtil instance; private Analyzer analyzer; private Directory picDirectory; private Directory topDirectory; public Analyzer getAnalyzer() { return analyzer; } public void setAnalyzer(Analyzer analyzer) { this.analyzer = analyzer; } public Directory getPicDirectory() { return picDirectory; } public void setPicDirectory(Directory picDirectory) { this.picDirectory = picDirectory; } public Directory getTopDirectory() { return topDirectory; } public void setTopDirectory(Directory topDirectory) { this.topDirectory = topDirectory; } private LuceneUtil() { analyzer = new IKAnalyzer(); try { picDirectory = FSDirectory.open(new File(DXConstants.PIC_INDEX_DIR)); topDirectory = FSDirectory.open(new File(DXConstants.TOP_INDEX_DIR)); } catch (IOException e) { throw new RuntimeException(e); } } public static LuceneUtil getInstance() { if (null == instance) instance = new LuceneUtil(); return instance; } }
建立索引的方法:
public static void createTopIndex(List<SearchTop> list, boolean isFirstTime) { RAMDirectory ramDirectory = new RAMDirectory(); try { IndexWriter indexwriter = new IndexWriter(ramDirectory, LuceneUtil.getInstance().getAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED); if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { Document doc = new Document(); SearchTop searchTop = list.get(i); Field field = new Field("id", String.valueOf(searchTop.getId()), Field.Store.YES, Field.Index.NO); doc.add(field); String title = DXUtil.characterUtil(searchTop.getTitle()); if(title!=null && !"".equals(title)){ field = new Field("title", title, Field.Store.YES, Field.Index.ANALYZED); doc.add(field); } String description = searchTop.getDescription(); if(description!=null && !"".equals(description)){ field = new Field("description", description, Field.Store.NO,Field.Index.ANALYZED); doc.add(field); } field = new Field("cid", String.valueOf(searchTop.getCid()), Field.Store.YES, Field.Index.NOT_ANALYZED); doc.add(field); field = new Field("addtime", String.valueOf(searchTop.getCreateDate()), Field.Store.YES, Field.Index.NOT_ANALYZED); doc.add(field); String content = DXUtil.characterUtil(searchTop.getContents()); if(content!=null && !"".equals(content)){ field = new Field("contents", content, Field.Store.NO, Field.Index.ANALYZED); doc.add(field); } field = new Field("sex", String.valueOf(searchTop.getSex()), Field.Store.YES, Field.Index.NOT_ANALYZED); doc.add(field); field = new Field("tid",String.valueOf(searchTop.getTid()),Field.Store.YES,Field.Index.NOT_ANALYZED); doc.add(field); field = new Field("topicid", String.valueOf(searchTop.getTopicId()), Field.Store.YES, Field.Index.ANALYZED); doc.add(field); field = new Field("piccount", String.valueOf(searchTop.getPiccount()), Field.Store.YES, Field.Index.NOT_ANALYZED); doc.add(field); String city = DXUtil.characterUtil(searchTop.getCityName()); if(city!=null && !"".equals(city)){ field = new Field("cityname", city, Field.Store.YES, Field.Index.ANALYZED); doc.add(field); } field = new Field("purview", dealPurview(searchTop.getSex(), searchTop.getCid()), Field.Store.YES, Field.Index.NOT_ANALYZED); doc.add(field); String seasonname = DXUtil.characterUtil(searchTop.getSeasonName()); if(seasonname!=null && !"".equals(seasonname)){ field = new Field("seasonname", seasonname, Field.Store.YES, Field.Index.ANALYZED); doc.add(field); } String recordurl = dealTopUrl(searchTop.getSex(), searchTop.getCid(), searchTop.getTid()); if(recordurl!=null && !"".equals(recordurl)){ field = new Field("recordurl", recordurl, Field.Store.YES, Field.Index.NOT_ANALYZED); doc.add(field); } indexwriter.addDocument(doc); } } indexwriter.optimize(); indexwriter.close(); IndexWriter writer = new IndexWriter(LuceneUtil.getInstance() .getTopDirectory(), LuceneUtil.getInstance() .getAnalyzer(), isFirstTime, IndexWriter.MaxFieldLength.LIMITED); writer.addIndexesNoOptimize(new Directory[] { ramDirectory }); writer.close(); } catch (CorruptIndexException e) { throw new RuntimeException(e); } catch (IOException ex) { throw new RuntimeException(ex); } }
对增量数据循环建立索引:
private void createTopIndex() { long count = searchTopService.findTotalRecordNum(); boolean flag = DXUtil.hasNotFile(new File(DXConstants.TOP_INDEX_DIR)); List<SearchTop> tops = new ArrayList<SearchTop>(); int max = DXConstants.PAGE_SIZE; int first = Integer.parseInt(DXUtil .getRecordNumFromFile(DXConstants.TOP_TXT)); while (first < count) { tops = searchTopService.findTopToIndex(first, max); first = first + max; IndexCreator.createTopIndex(tops, flag); if(flag == true) flag = false; DXUtil.writeContent(String.valueOf(first), DXConstants.TOP_TXT); } if (first >= count) DXUtil.writeContent(String.valueOf(count), DXConstants.TOP_TXT); optimiseTopicIndex(flag); } //optimize index private void optimiseTopicIndex(boolean flag) { IndexWriter writer = null; try { writer = new IndexWriter( LuceneUtil.getInstance().getTopDirectory(), LuceneUtil .getInstance().getAnalyzer(), flag, IndexWriter.MaxFieldLength.LIMITED); writer.optimize(); writer.close(); } catch (Exception e) { } }
主要代码以备忘。
相关文章推荐
- 路由的基本概念介绍
- HBase基本概念和hbase shell常用命令用法
- GCD介绍(一):基本概念和Dispatch Queue
- 音视频编解码技术之视频编码基本概念介绍
- Android开发中的基本概念介绍
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- 内核映像启动时基本概念介绍
- ElasticSearch基本概念介绍(一)
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- 一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
- 一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等
- 路由基本命令(含中文解释)
- Linux基本命令du和linux中df介绍
- GCD介绍(一): 基本概念和Dispatch Queue
- 在Ubuntu下安装GCC编译器及GCC编译器的基本使用命令介绍
- git config命令使用第一篇——介绍,基本操作,增删改查
- 【Kubernetes】基本概念介绍
- TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络
- Blog1@linux 基本命令介绍(一)
- Http的定义及其基本概念介绍