java - 带有 Hibernate Search/Lucene 的标签云?

标签 java hibernate jpa lucene hibernate-search

我们的 Web 应用程序有一个产品类别数据库,其中有 n 个产品。每个产品可以有 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 构建标签云?

最佳答案

我认为你可以尝试使用 lucene 方面 ( https://lucene.apache.org/core/4_0_0/facet/org/apache/lucene/facet/doc-files/userguide.html )

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

关于java - 带有 Hibernate Search/Lucene 的标签云?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066637/

相关文章:

Java 正则表达式模式

java - 优先队列 Java 添加方法抛出语法错误和错位构造错误

java - Hibernate ConstraintViolationException 可能是由于循环方案

java - Hibernate 中缺少关键字

java - JPA 规范 - 检查多行中的值

java - Netty 客户端连接操作的哪一部分应该共享?

java - 字符串到字符数组 Java

mysql - 如何将数据库(MySQL)中的[名称,值]对存储在表的单个列/字段中?

java - 如果嵌入了子对象,则只能引用子对象的属性

java - 使用 @ManyToMany 关联连接三个表