rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » JavaEE

hibernate search 实例

hibernate search 本身底层运用lucene技术。下载最新hibernate-search-3.2.0.Final-dist.zip把里面的包全导入classpath中。

在加入一些依赖包:如javassist.jar,login4jar版本要高一点的,slf4j-log4j12-1.5.2.jar等等

基本的东西有了

首先在hibernate.hbm.xml中配置

 <!-- use a file system based index -->

<property name="hibernate.search.default.directory_provider">
                org.hibernate.search.store.FSDirectoryProvider
         </property>
                  
         <!-- directory where the indexes will be stored -->
         <property name="hibernate.search.default.indexBase" >
                D:/tmp/index
         </property>
         <!--配置文件-->
     <mapping resource="com/zz/Zz.hbm.xml" />
<event type="post-update">
<listener class="org.hibernate.search.event.FullTextIndexEventListener" />
</event>
<event type="post-insert">
<listener class="org.hibernate.search.event.FullTextIndexEventListener" />
</event>
<event type="post-delete">
<listener class="org.hibernate.search.event.FullTextIndexEventListener" />
</event>

接着建立

在pojo类中加入注解

如:import java.io.Serializable;

import org.hibernate.search.annotations.Analyzer;
import org.hibernate.search.annotations.DocumentId;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;

@Indexed
public class Zz implements Serializable{

 private static final long serialVersionUID = 1L;
 public int id;
 public String name;
 public String password;
 
 @DocumentId
public int getId() {
 return id;
}
public void setId(int id) {
 this.id = id;
}

@Field(store=Store.YES)
public String getName() {
 return name;
}
public void setName(String name) {
 this.name = name;
}
@Field(store=Store.YES,index=Index.UN_TOKENIZED)
public String getPassword() {
 return password;
}
public void setPassword(String password) {
 this.password = password;
}

}
在后:

index让hibernate把索引 到 D:/tmp/index

public void index(){
  
   Configuration config = new Configuration().configure();
  
  SessionFactory sf = config.buildSessionFactory();
  
  Session session = sf.openSession();
  
  FullTextSession fts = Search.getFullTextSession(session);
  
  fts.getTransaction().begin();
  
  List<Zz> list = session.createQuery("from Zz").list();
  for(Zz z:list){
   fts.index(z);
  }
  fts.getTransaction().commit();
  
 }

表写find();

public void find(){
  Query luncene=null;
  QueryParser parse = new QueryParser("title",new StandardAnalyzer());  
  try {
   luncene = parse.parse("name:中国");
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
     Configuration config = new Configuration().configure();
   
   SessionFactory sf = config.buildSessionFactory();
   
   Session session = sf.getCurrentSession();
   FullTextSession fts = Search.getFullTextSession(session);
   
   fts.getTransaction().begin();
   
         org.hibernate.Query query = fts.createFullTextQuery(luncene, Zz.class);
         query.setFirstResult(0);
         query.setMaxResults(8);
        
         List<Zz> list = query.list();
        
         for(Zz z:list){
          
          System.out.println("id:"+z.getId()+"name:"+z.getName());
         }
         fts.getTransaction().commit();
 }

先调用index()后在调用find()方法。

这就是运用了hibernate search!效率高一些!对中文支持不是太好!

顶一下
(2)
踩一下
(0)