Hibernate Search - 在查询上应用 facet 不会返回任何结果

软糖

我正在尝试使用返回的方面之一缩小原始查询的范围,但这似乎不起作用,即它没有返回任何结果。我第一次调用list()方法时,我得到 8 个产品(总共 15 个,这些受setMaxResults()方法限制)和两个方面的列表:一个计数为 14,另一个计数为 1。当我将第一个方面应用于当前查询并使用该list()方法重新执行查询,我期望看到总共 14 个产品,但返回的是一个空列表。我看不到我正在做的任何与文档不同的事情。

建筑查询:

Session session = entityManager.unwrap(Session.class);
        FullTextSession fullTextSession = org.hibernate.search.Search.getFullTextSession(session);

        QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder()
                .forEntity(Product.class).get();

        Query luceneQuery = queryBuilder.all().createQuery();

        FacetingRequest categoryFacetingRequest = queryBuilder.facet()
                .name("categoryFaceting")
                .onField("productCategoryId")
                .discrete()
                .orderedBy(FacetSortOrder.COUNT_DESC)
                .includeZeroCounts(false)
                .createFacetingRequest();

        FullTextQuery hibernateQuery = fullTextSession.createFullTextQuery(luceneQuery, Product.class);

        hibernateQuery.setFirstResult(pageable.getOffset());
        hibernateQuery.setMaxResults(pageable.getPageSize());

        FacetManager facetManager = hibernateQuery.getFacetManager();
        facetManager.enableFaceting(categoryFacetingRequest);

        @SuppressWarnings("unchecked")
        List<Product> products = hibernateQuery.list();

        List<Facet> categoryFacets = facetManager.getFacets("categoryFaceting");

        FacetSelection facetSelection = facetManager.getFacetGroup("categoryFaceting");
        facetSelection.selectFacets(categoryFacets.get(0));
        products = hibernateQuery.list();

Product 实体上的 productCategoryId 字段:

@Field(analyze = Analyze.NO)
@NumericField
@Facet(encoding = FacetEncodingType.STRING)
private Long productCategoryId;
罗迪埃

恐怕这是一个错误。感谢您的提问:既然我们知道了,我们可以努力修复它。此错误的票证是HSEARCH-2668

不过有一个解决方法:您可以使您的字段非数字。只需删除@NumericField注释并用于org.hibernate.search.bridge.builtin.LongBridge索引它:

@Field(analyze = Analyze.NO, bridge = @FieldBridge(impl = org.hibernate.search.bridge.builtin.LongBridge.class))
@Facet(encoding = FacetEncodingType.STRING)
private Long productCategoryId;

如果您需要此字段用于其他目的,您可以创建第二个字段,并在第二个字段上应用分面:

@Field(analyze = Analyze.NO)
@NumericField
@Field(name = "productCategoryId_facet", analyze = Analyze.NO, bridge = @FieldBridge(impl = org.hibernate.search.bridge.builtin.LongBridge.class))
@Facet(forField = "productCategoryId_facet", encoding = FacetEncodingType.STRING)
private Long productCategoryId;
// Then use productCategoryId_facet instead of productCategoryId in your facet-enabled queries

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有枚举字段的Hibernate Search / Lucene范围查询不返回任何结果

在Web应用程序中启动Hibernate Search时出错

Hibernate Search查询多个实体

Hibernate Search 5.0数值Lucene查询HSEARCH000233问题

用.toArray查询不会返回任何结果以供查看

如果查询为空白,如何将Algolia设置为不返回任何结果Laravel&Vue Instant Search

带有组合框中参数的MS Access查询不会返回任何结果

Spring Boot中的JPA查询不会返回任何结果

MongoDB-通过元数据查询GridFS不会返回任何结果

Hibernate Search 6中LocalDateTime的范围查询

带有“日期= YYYY-MM-DD”的GAE Search API查询不返回任何结果

Hibernate Search不返回任何结果

Hibernate Search查询类

ElasticSearch search_analyzer已应用,但未返回任何结果

对SearchFactory优化的Hibernate Search调用不会立即调用

插入后,Hibernate Search不会重新索引lucene索引

使用Hibernate Search查询枚举(枚举)的IndexedEmbedded列表

参数化的MySQL查询不会返回任何结果

Hibernate查询返回空结果列表

Solr Facet查询结果(带连字符)

Hibernate Search Facet在多个字段上

查询Hibernate或HQL不返回结果

如果字符串中有“ =”,则Hibernate Search(Lucene)返回空结果

简单的SPARQL查询不会返回任何结果

Elastic Search 匹配查询返回错误的结果和分数

Hibernate Search 空间构面查询先工作 5 次,然后只返回第 5 个结果

使用 Hibernate Search 时“过滤查询不支持排序”

Hibernate Search 中 BigDecimal 的范围查询

Hibernate Search:如何查询父类中的字段?