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

时间:2014-11-02 05:15:48

标签: hibernate lucene hibernate-search

下面的代码工作正常,但我需要扩展它以支持从两个类(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());

1 个答案:

答案 0 :(得分:1)

方法createFullTextQuery(..)采用第一个必需参数,然后使用可选 varargs参数列出您要搜索的所有类型。

你可以简单地省略列出那里的类型,让它以所有已知的索引实体为目标。

FullTextEntityManager ftEm = Search.getFullTextEntityManager(em); 
javax.persistence.Query query = ftEm.createFullTextQuery(luceneQuery);

明确列出类型是一种过滤形式,但您也可以使用自己的自定义FullTextFilter来限制某些其他条件的结果,并且仍然将所有已知类型定位为不需要列出它们。