Hibernate etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Hibernate etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Ekim 2009 Pazartesi

Search (Clob Veri Tipinde Arama)

Veritabanında "Text" olarak pojonuzda da "Clob" olarak tuttuğunuz
verilerin içinde arama yapabilmek için aşağıdakileri uygulamanız
yeterli olacaktır.

**Öncelikle hibernate search annotationlarını ve fonksiyonlarını kullanabilmeniz için aşağıdaki .jar dosyalarını projenize eklemeniz gerekmektedir.

solr-core.jar
solr-common.jar
slf4j-api.jar
lucene-core.jar
jta.jar
jsr250-api.jar
jms.jar
hibernate-core.jar
hibernate-commons-annotations.jar
ejb3-persistence.jar
hibernate-search.jar
lucene-analyzers.jar
lucene-snowball.jar
( http://sourceforge.net/projects/hibernate/files/hibernate-search/3.1.1.GA/hibernate-search-3.1.1.GA-dist.zip/download Buradan lib dizininden yukarıdaki .jar dosyalarına erişebilirsiniz.)

**Pojonuzdaki arama yapmak istediğiniz değişkene hibernate search annotationlarını eklemelisiniz.

@Column(name="content")
@Field(name = "content",index=Index.TOKENIZED,store=Store.NO)
@FieldBridge(impl=ClobImpl.class)
private Clob content;

**ClomImpl Sınıfı

import java.sql.Clob;

import org.hibernate.search.bridge.StringBridge;

/**
* @author hilal
* @version 2.0
*/
public class ClobImpl implements StringBridge {

public String objectToString(Object object) {

Clob overview = ( (Clob) object );
String str = null;
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
try{
br = new BufferedReader(overview.getCharacterStream());
String line = null;
while((line = br.readLine())!= null){
sb.append(line);
}
str=sb.toString();
br.close();
}catch(Exception e){
if (br!=null)
try {
br.close();
}
catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();

}
return str;
}
}
**En son yapacağınız iş ise search fonksiyonunu yazmak.

public List search(String keyword) throws Exception {

Session sess = (Session) HibernateUtil.getSessionFactory().getCurrentSession();
FullTextSession fullTextSession = Search.getFullTextSession(sess);
Transaction tx = fullTextSession.beginTransaction();
try {
List result= searchByKeyword1(fullTextSession,keyword);
List diaryFormList;
diaryFormList = getFormList(result);
tx.commit();
return diaryFormList;
}
catch (Exception e) {
log.error("Diary search Error \n"+e.getMessage());
if (tx!=null && tx.isActive())
tx.rollback();
e.printStackTrace();
throw e;
}

}

public static List searchByKeyword(FullTextSession fs, ,String keyword) {

BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add( new PrefixQuery( new Term( "content", keyword) ), BooleanClause.Occur.MUST );

org.hibernate.Query fullTextQuery = fs.createFullTextQuery(booleanQuery, Diary.class);

List result = fullTextQuery.list();

return result;
}

Artık "Clob " tipinde anahtar kelime arama işlemini rahatlıkla yapabilirsiniz.