使用Hibernate Search / Lucene标记云?

时间:2016-03-17 16:37:25

标签: java hibernate jpa lucene hibernate-search

我们的网络应用程序有一个产品类别数据库,其中包含许多产品。每个产品可以有0个或更多与之关联的标签。所有这些对象都使用Hibernate Search(JPA)编制索引。我们正在尝试使用这些代码构建标签云,以便更容易查看最受欢迎的内容。我们的代码看起来像这样...

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(this.entityManager);

        SearchFactory searchFactory = fullTextEntityManager.getSearchFactory();
        IndexReader indexReader = searchFactory.getIndexReaderAccessor().open(ProductBean.class);
        TermStats[] termStats = null;
        int numResults = 500;
        String field = "tags.name";

        try {
            termStats = org.apache.lucene.misc.HighFreqTerms.getHighFreqTerms(indexReader, numResults, field,
                    new org.apache.lucene.misc.HighFreqTerms.DocFreqComparator());
        } finally {
            searchFactory.getIndexReaderAccessor().close(indexReader);
        }

此代码按照我们的预期工作,并为我们提供了一组TermStats对象,这些对象为我们提供了构建标记云所需的评分信息。但是,现在我们希望按类别构建标记云。也就是说,我们希望能够根据特定产品所属的类别来过滤我们的结果。但是,我们还没有找到一种方法来实现这一点,因为IndexReader不会似乎允许我们附加任何类型的过滤器。

有没有人完成类似的任何事情?有没有更好的方法来使用Hibernate Search构建标签云?

1 个答案:

答案 0 :(得分:2)

我认为您可以尝试使用lucene facets(enter image description here

它们允许您添加某种“分组依据”并依靠搜索结果。