【问题标题】:Hibernate FullTextQuery, without search term?Hibernate FullTextQuery,没有搜索词?
【发布时间】:2013-11-15 04:23:39
【问题描述】:

我正在重写一个 Hibernate/lucene 函数 findRangeSorting(),它根据权限过滤器检索表中的所有记录。现在,这是通过将 HQL(hibernate sql)字符串拼接在一起并使用它来查询数据库手动完成的(非常糟糕)。

我还有一个搜索功能,它使用更好的编程方法,通过使用 hibernate 注释为类创建过滤器并将布尔查询组合成一个全文查询,然后根据哪个用户进行搜索添加过滤器. (注意不是全部功能)

fullTextQuery = fullTextSession.createFullTextQuery(bq, this.type); results = tab.getQueryFiltersForSearch(fullTextQuery).setSort(sort).list();

我想将此功能用于 findRangeSorting() 函数,因为过滤器已经到位,所以我基本上只需要让搜索返回所有内容。缺点是搜索 "" 和 * 无法完成此操作,因此我需要创建一个 FullTextQuery 而无需搜索实际术语,或者可能找到替代方法用于从具有基于用户权限的过滤器的表中检索一系列行

我对hibernate没有最好的理解,所以我的假设可能完全错误。任何帮助表示赞赏。

【问题讨论】:

    标签: java hibernate filter lucene hibernate-search


    【解决方案1】:

    要创建一个匹配所有文档的查询,您应该可以使用 Lucene 的MatchAllDocsQuery。我不知道 Hibernate QueryBuilder 中有任何东西会创建一个 MatchAllDocsQuery,但它很简单,可以直接通过 Lucene API 创建一个,例如:

    org.apache.lucene.search.Query allQuery = new org.apache.lucene.search.MatchAllDocsQuery();
    fullTextQuery = fullTextSession.createFullTextQuery(allQuery, this.type); 
    results = tab.getQueryFiltersForSearch(fullTextQuery).setSort(sort).list();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多