• 我的HibernateSearch笔记


    话不多说,直接上代码:

    实体类:

    package com.smt.pojo;
    
    import java.io.Serializable;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
    import org.hibernate.annotations.Cache;
    import org.hibernate.annotations.CacheConcurrencyStrategy;
    import org.hibernate.search.annotations.Analyzer;
    import org.hibernate.search.annotations.DocumentId;
    import org.hibernate.search.annotations.Field;
    import org.hibernate.search.annotations.Indexed;
    import org.hibernate.search.annotations.Store;
    @Entity
    @Indexed
    @Table(name="XFZ_TXJP_POOL",catalog = "ecrm")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    @Analyzer(impl=SmartChineseAnalyzer.class)
    public class Txjp implements Serializable {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        public Txjp(){
            
        }
        
        public Txjp(String pid){
            super();
            this.pid = pid;
        }
        
        private String pid;
    
        @Id
        @Column(name = "PID", unique = true, nullable = false, length = 50)
        @DocumentId
        public String getPid() {
            return pid;
        }
    
        public void setPid(String pid) {
            this.pid = pid;
        }
    
        private String sdate;
        
        @Column(name = "SDATE", nullable = false)
        public String getSdate() {
            return sdate;
        }
    
        public void setSdate(String sdate) {
            this.sdate = sdate;
        }
        
        private String keyWord;
    
        @Column(name = "KEY_WORD", nullable = true)
        public String getKeyWord() {
            return keyWord;
        }
    
        public void setKeyWord(String keyWord) {
            this.keyWord = keyWord;
        }
        
        private String productId;
    
        @Column(name = "PRODUCTID", nullable = true)
        public String getProductId() {
            return productId;
        }
    
        public void setProductId(String productId) {
            this.productId = productId;
        }
        
        private String plink;
    
        @Column(name = "PLINK", nullable = true)
        public String getPlink() {
            return plink;
        }
    
        public void setPlink(String plink) {
            this.plink = plink;
        }
        
        private String sku;
    
        
        @Column(name = "SKU", nullable = true)
        public String getSku() {
            return sku;
        }
    
        public void setSku(String sku) {
            this.sku = sku;
        }
        
        private String skuLink;
    
        @Column(name = "SKU_LINK", nullable = true)
        public String getSkuLink() {
            return skuLink;
        }
    
        public void setSkuLink(String skuLink) {
            this.skuLink = skuLink;
        }
        
        private String fromArea;
    
        @Column(name = "FROMAREA", nullable = true)
        public String getFromArea() {
            return fromArea;
        }
    
        public void setFromArea(String fromArea) {
            this.fromArea = fromArea;
        }
        
        private String label;
    
        @Column(name = "LABEL", nullable = true)
        public String getLabel() {
            return label;
        }
    
        public void setLabel(String label) {
            this.label = label;
        }
        
        private String skuParty;
    
        @Column(name = "SKU_PARTY", nullable = true)
        @Field(store=Store.NO)
        public String getSkuParty() {
            return skuParty;
        }
    
        public void setSkuParty(String skuParty) {
            this.skuParty = skuParty;
        }
        
        private String storeUrl;
    
        @Column(name = "STOREURL", nullable = true)
        public String getStoreUrl() {
            return storeUrl;
        }
    
        public void setStoreUrl(String storeUrl) {
            this.storeUrl = storeUrl;
        }
        
        private String productName;
    
        @Column(name = "PRODUCTNAME", nullable = true)
        @Field(store=Store.NO)
        public String getProductName() {
            return productName;
        }
    
        public void setProductName(String productName) {
            this.productName = productName;
        }
    }

    查询方法(dao层):

    package com.smt.dao.impl;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.log4j.Logger;
    import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
    import org.apache.lucene.queryParser.ParseException;
    import org.apache.lucene.queryParser.QueryParser;
    import org.apache.lucene.search.Query;
    import org.apache.lucene.util.Version;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.search.FullTextQuery;
    import org.hibernate.search.FullTextSession;
    import org.hibernate.search.Search;
    import org.hibernate.search.SearchFactory;
    import org.hibernate.search.query.dsl.QueryBuilder;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import com.smt.dao.ITxjpDao;
    import com.smt.pojo.Txjp;
    
    @Repository("txjpDao")
    public class TxjpDaoImpl implements ITxjpDao {
    
        private static final Logger LOGGER = Logger.getLogger(TxjpDaoImpl.class);
        
        @Autowired
        private SessionFactory sessionFactory;
        
        private Session getCurrentSession(){
            return this.sessionFactory.getCurrentSession();
        }
        
        @Override
        public Txjp load(String id) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public Txjp get(String id) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public List<Txjp> findAll() {
            LOGGER.info("查询全部数据BySql");
            Session session = this.getCurrentSession();
            List<Txjp> list = null;
            try {
                list = session.createQuery("from Txjp").list();
            } catch (Exception e) {
                LOGGER.error(e.getMessage());
            }finally{
                session.close();
            }
            return list;
        }
    
        @Override
        public void persist(Txjp entity) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public String save(Txjp entity) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public void saveOrUpdate(Txjp entity) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void delete(String id) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void flush() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public List<Txjp> LoadAll() {
            Index();
            Session session = sessionFactory.openSession();  
            FullTextSession fullTextSession = Search.getFullTextSession(session);  
            //在字段content中检索  
            //QueryParser queryParser = new QueryParser(Version.LUCENE_36, "productName", new SmartChineseAnalyzer(Version.LUCENE_36));  
            Query luceneqQuery=null;  
            
            //多项检索
            SearchFactory sf = fullTextSession.getSearchFactory();
            QueryBuilder qb = sf.buildQueryBuilder().forEntity(Txjp.class).get();
            //多项检索
            luceneqQuery  = qb.keyword().onFields("productName").matching("酱油").createQuery();  
            //执行检索,得到结果集  
            FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneqQuery, Txjp.class);  
            List<Txjp> list = fullTextQuery.list();
            //查看结果做验证  
            fullTextSession.close();
            LOGGER.info("测试一下");
            //这里会提示报Session已经关闭
            //session.close();
            return list;
        }
    
        @Override
        public void Index() {
            Session session = sessionFactory.openSession();  
            FullTextSession fullTextSession = Search.getFullTextSession(session);  
            //查出结果  
            List<Txjp> list = session.createCriteria(Txjp.class).list();  
            session.beginTransaction();  
            //依次建立索引  
            for (Iterator iterator = list.iterator(); iterator.hasNext();) {  
                Txjp model = (Txjp) iterator.next();  
                fullTextSession.index(model);  
            }  
            session.getTransaction().commit();  
            session.close();   
        }
    }

    pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>MvcTest</groupId>
      <artifactId>MvcTest</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>MvcTest Maven Webapp</name>
      <url>http://maven.apache.org</url>
      
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.1.4.RELEASE</spring.version>
        <hibernate.version>4.2.11.Final</hibernate.version>
        <jackson.version>2.5.0</jackson.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>
      </properties>
      
      <dependencies>
        <dependency>  
           <groupId>junit</groupId>  
           <artifactId>junit</artifactId>  
           <version>4.12</version>  
           <scope>test</scope>
        </dependency>
        <!-- 导入java ee jar 包 -->  
        <dependency>  
            <groupId>javax</groupId>  
            <artifactId>javaee-api</artifactId>  
            <version>7.0</version>  
        </dependency>
        <!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- 使用springMVC配置 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <!-- 关系型数据库整合时配置 如hibernate jpa等 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <!-- hibernate -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        
        <!-- 二级缓存ehcache -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>2.9.0</version>
        </dependency>
    
        <!-- mysql连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.1</version>
        </dependency>
        <!-- c3p0数据源 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5-pre10</version>
        </dependency>
    
        <!-- json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.3</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    
        <!-- aop -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.4</version>
        </dependency>
    
        <!-- servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
            <scope>provided</scope>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- 日志文件管理包 -->  
        <!-- log start -->  
        <dependency>  
            <groupId>log4j</groupId>  
            <artifactId>log4j</artifactId>  
            <version>${log4j.version}</version>  
        </dependency>  
        <!-- 格式化对象,方便输出日志 -->  
        <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>fastjson</artifactId>  
            <version>1.1.41</version>  
        </dependency>  
    
    
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-api</artifactId>  
            <version>${slf4j.version}</version>  
        </dependency>  
    
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-log4j12</artifactId>  
            <version>${slf4j.version}</version>  
        </dependency>  
        <!-- log end --> 
        
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
        
        <dependency>  
            <groupId>org.apache.lucene</groupId>  
            <artifactId>lucene-smartcn</artifactId>  
            <version>3.6.2</version>  
        </dependency>
        
      </dependencies>
      <build>
        <finalName>MvcTest</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
      </build>
    </project>

    另外分享三个我学习到的博客,谢谢这三位博主:

    http://blog.csdn.net/zhengwei223/article/details/11952763

    http://blog.csdn.net/dm_vincent/article/details/40649203

    http://www.tuicool.com/articles/MZfiAb

  • 相关阅读:
    选择 冒泡 快速 插入排序
    类方法
    Java--静态区域块
    打印字母如何显示声调
    navicat 创建的表,username字段不能接受中文名字。
    C++primer plus第六版课后编程题答案10.8(来个高手教教我)
    C++primer plus第六版课后编程题答案10.7
    C++primer plus第六版课后编程题答案10.6
    错误 1 error C2143: 语法错误 : 缺少“;”(在“using”的前面)
    C++primer plus第六版课后编程题答案10.5
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/6420040.html
Copyright © 2020-2023  润新知