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.