Hibernate搜索:定义可动态搜索的类
下面的代码运行良好,但是我需要将其扩展到支持从两个类(UserEnt和BookEnt)到40个类。为了提高性能,我将允许用户选择要搜索的类,这意味着createFullTextQuery方法中的类应该根据选择动态声明。这可能吗?否则,我将不得不在createFullTextQuery中声明40个类Hibernate搜索:定义可动态搜索的类,hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,下面的代码运行良好,但是我需要将其扩展到支持从两个类(UserEnt和BookEnt)到40个类。为了提高性能,我将允许用户选择要搜索的类,这意味着createFullTextQuery方法中的类应该根据选择动态声明。这可能吗?否则,我将不得不在createFullTextQuery中声明40个类 // LUCENE SEARCH String[] fields = {"firstName", "lastName", "name"}; QueryParser parser
// LUCENE SEARCH
String[] fields = {"firstName", "lastName", "name"};
QueryParser parser = new MultiFieldQueryParser( Version.LUCENE_34,
fields, new StandardAnalyzer(Version.LUCENE_34));
org.apache.lucene.search.Query luceneQuery = null;
try {
luceneQuery = parser.parse(s);
}
catch (ParseException e) {
throw new RuntimeException("Unable to parse query: " + s, e);
}
// HIBERNATE SEARCH WRAP
FullTextEntityManager ftEm = Search.getFullTextEntityManager(em);
javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery,
UserEnt.class, BookEnt.class);
List <?> results = query.getResultList();
System.out.println("Records found:"+results.size());
//LUCENE搜索
字符串[]字段={“firstName”、“lastName”、“name”};
QueryParser解析器=新的多字段QueryParser(Version.LUCENE_34,
字段,新标准分析器(LUCENE_34版);
org.apache.lucene.search.Query luceneQuery=null;
试试{
luceneQuery=parser.parse;
}
捕获(异常解析){
抛出新的RuntimeException(“无法分析查询:+s,e”);
}
//休眠搜索包装
FullTextEntityManager ftEm=Search.getFullTextEntityManager(em);
javax.persistence.Query Query=ftEm.createFullTextQuery(luceneQuery,
UserEnt.class,BookEnt.class);
List results=query.getResultList();
System.out.println(“找到的记录:+results.size());
该方法首先使用一个强制参数,然后使用一个可选的varargs参数列出所有要搜索的类型
您可以简单地省略其中列出的类型,让它以所有已知的索引实体为目标
FullTextEntityManager ftEm = Search.getFullTextEntityManager(em);
javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery);
显式列出类型是一种过滤形式,但是您也可以滚动您自己的自定义项,将结果限制在某些其他条件上,并且仍然将所有已知类型作为目标,使其不需要列出它们