<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>${hibernate-search.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-smartcn</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-phonetic</artifactId>
<version>${lucene.version}</version>
</dependency>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
destroy-method="destroy">
<property name="dataSource" ref="poolingDataSource" />
<property name="configLocation">
<value> classpath:hibernate.cfg.xml </value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<!-- Booleans can be easily used in expressions by
declaring HQL query substitutions in Hibernate configuration -->
<prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
<!-- http://ehcache.org/documentation/integrations/hibernate -->
<!-- http://www.tutorialspoint.com/hibernate/hibernate_caching.htm -->
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<!-- org.hibernate.cache.ehcache.EhCacheRegionFactory -->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<!-- hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、 list()、Iterator()、createCriteria()、createQuery()
等方法获得的数据结果集的话,就需要设置hibernate.cache.use_query_cache true -->
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>
<!-- Hibernate Search index directory -->
***<prop key="hibernate.search.default.indexBase">indexes/</prop>***
</props>
</property>
</bean>
@Indexed
@AnalyzerDef(
name="enTopicAnalyzer",
charFilters={
@CharFilterDef(factory=HTMLStripCharFilterFactory.class)
},
tokenizer=@TokenizerDef(factory=StandardTokenizerFactory.class),
filters={
@TokenFilterDef(factory=StandardFilterFactory.class),
@TokenFilterDef(factory=StopFilterFactory.class),
@TokenFilterDef(factory=PhoneticFilterFactory.class,
params = {
@Parameter(name="encoder", value="DoubleMetaphone")
}),
@TokenFilterDef(factory=SnowballPorterFilterFactory.class,
params = {
@Parameter(name="language", value="English")
})
}
)
public class Topic {
......
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
@Analyzer(definition = "enTopicAnalyzer")
private String title;
......
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
@Analyzer(definition = "enTopicAnalyzer")
private String content;
......
@Enumerated(EnumType.STRING)
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.NO, bridge=@FieldBridge(impl=EnumBridge.class))
private TopicStatus status;
...
}
ApplicationContext context = new ClassPathXmlApplicationContext("spring-resources.xml");
SessionFactory sessionFactory = (SessionFactory) context.getBean("sessionFactory");
Session sess = sessionFactory.openSession();
FullTextSession fullTextSession = Search.getFullTextSession(sess);
try {
fullTextSession.createIndexer().startAndWait();
} catch (InterruptedException e) {
LOG.error(e.getMessage(), e);
} finally {
fullTextSession.close();
}
((AbstractApplicationContext)context).close();
FullTextSession fullTextSession = Search
.getFullTextSession(getSession());
QueryBuilder queryBuilder = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(Show.class).get();
org.apache.lucene.search.Query luceneQuery = null;
luceneQuery = queryBuilder.keyword()// .wildcard()
.onFields("title", "content").matching(query.getKeyword())
// .matching("*" + query.getKeyword() + "*")
.createQuery();
FullTextQuery hibernateQuery = fullTextSession.createFullTextQuery(
luceneQuery, Show.class);
return hibernateQuery.list();
<property name="hibernate.search.analyzer"> org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer</property>
@Indexed @Analyzer(impl=SmartChineseAnalyzer.class)
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-smartcn</artifactId>
<version>${lucene.version}</version>
</dependency>
//must true
MustJunction term = queryBuilder.bool().must(queryBuilder.keyword()
.onFields("title", "content") .matching(query.getKeyword()).createQuery());
//must false
term.must(queryBuilder.keyword()
.onField("status") .matching(query.getExcludeStatus()).createQuery()).not();
private FullTextQuery findByKeywordQuery(TopicQuery query) {
FullTextSession fullTextSession = Search
.getFullTextSession(getSession());
QueryBuilder queryBuilder = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(Topic.class).get();
org.apache.lucene.search.Query luceneQuery = null;
if (null == query.getStatus() && null == query.getUsername() && null == query.getExcludeStatus()) {
luceneQuery = queryBuilder.keyword()// .wildcard()
.onFields("title", "content").matching(query.getKeyword())
// .matching("*" + query.getKeyword() + "*")
.createQuery();
if(LOG.isDebugEnabled()){
LOG.debug("create clean keyword search query: " + luceneQuery.toString());
}
} else {
MustJunction term = queryBuilder.bool().must(queryBuilder.keyword()
.onFields("title", "content") .matching(query.getKeyword()).createQuery());
if(null != query.getStatus()){
term.must(queryBuilder.keyword()
// .wildcard()
.onField("status")
.matching(query.getStatus()).createQuery());
}
if(null != query.getExcludeStatus()){
term.must(queryBuilder.keyword()
.onField("status")
.matching(query.getExcludeStatus()).createQuery()).not();
}
if(null != query.getUsername()){
term.must(queryBuilder.keyword()
// .wildcard()
.onField("owner.username")
.ignoreFieldBridge()
.matching(query.getUsername()).createQuery());
}
luceneQuery =term.createQuery();
if(LOG.isDebugEnabled()){
LOG.debug("create complicated keyword search query: " + luceneQuery.toString());
}
}
// BooleanQuery
FullTextQuery hibernateQuery = fullTextSession.createFullTextQuery(
luceneQuery, Topic.class);
return hibernateQuery;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有