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.

Hiç yorum yok:

Yorum Gönder