Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate搜索-对查询应用方面不会返回任何结果_Java_Hibernate_Hibernate Search - Fatal编程技术网

Java Hibernate搜索-对查询应用方面不会返回任何结果

Java Hibernate搜索-对查询应用方面不会返回任何结果,java,hibernate,hibernate-search,Java,Hibernate,Hibernate Search,我试图用一个返回的方面来缩小我的原始查询范围,但这似乎不起作用,也就是说,它不会返回任何结果。第一次调用list()方法时,我得到了8个产品(总共15个产品中,这些产品受到setMaxResults()方法的限制)和两个方面的列表:一个是计数14,另一个是计数1。当我将第一个方面应用于当前查询并使用list()方法重新执行查询时,我希望看到总共14个产品,但返回的是一个空列表。我看不到我正在做的任何与文档不同的事情 楼宇查询: Session session = entityManager.un

我试图用一个返回的方面来缩小我的原始查询范围,但这似乎不起作用,也就是说,它不会返回任何结果。第一次调用
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();

恐怕这是一只虫子。谢谢你的提问:现在我们已经意识到了,我们可以着手解决它了。这个错误的罚单是

不过有一个解决办法:可以将字段设置为非数字。只需删除
@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
@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