下面的代码工作正常,但我需要扩展它以支持从两个类(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());
答案 0 :(得分:1)
方法createFullTextQuery(..)采用第一个必需参数,然后使用可选 varargs参数列出您要搜索的所有类型。
你可以简单地省略列出那里的类型,让它以所有已知的索引实体为目标。
FullTextEntityManager ftEm = Search.getFullTextEntityManager(em);
javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery);
明确列出类型是一种过滤形式,但您也可以使用自己的自定义FullTextFilter来限制某些其他条件的结果,并且仍然将所有已知类型定位为不需要列出它们。