Hibernate搜索:定义可动态搜索的类

Hibernate搜索:定义可动态搜索的类,hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,下面的代码运行良好,但是我需要将其扩展到支持从两个类(UserEnt和BookEnt)到40个类。为了提高性能,我将允许用户选择要搜索的类,这意味着createFullTextQuery方法中的类应该根据选择动态声明。这可能吗?否则,我将不得不在createFullTextQuery中声明40个类 // LUCENE SEARCH String[] fields = {"firstName", "lastName", "name"}; QueryParser parser

下面的代码运行良好,但是我需要将其扩展到支持从两个类(UserEnt和BookEnt)到40个类。为了提高性能,我将允许用户选择要搜索的类,这意味着createFullTextQuery方法中的类应该根据选择动态声明。这可能吗?否则,我将不得不在createFullTextQuery中声明40个类

    // 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);
显式列出类型是一种过滤形式,但是您也可以滚动您自己的自定义项,将结果限制在某些其他条件上,并且仍然将所有已知类型作为目标,使其不需要列出它们