gpt4 book ai didi

java - 所选方面不应使用 hibernate 搜索过滤自己的组

转载 作者:行者123 更新时间:2023-12-05 05:52:11 27 4
gpt4 key购买 nike

如果我有一些带有颜色和尺寸的产品。牛仔裤 蓝色 L 号牛仔裤红色尺码 ST 恤红色尺寸 S等等..

使用 hibernate-search 进行分面搜索也很有效。但是,如果我选择其中一个条件,我希望自己组的值不会被过滤。例如

颜色红色 (2)蓝色 (3)

大小小号 (1)米 (2)大号(3)

如果我使用类似这样的方法选择红色

fullTextQuery.getFacetManager().getFacetGroup(FACET_COLOR).selectFacets(colorFacet)

此选择会影响项目列表的整体结果和尺寸方面的结果。但我当然不希望蓝色选项消失。我的预期行为与在大型电子商务网站上的表现大致相同。但在我的示例中,所选的红色也会更改自己的组。

我是不是漏了什么?这是我的例子:

public SearchResponse search(SearchRequest request)
{

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);

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

BooleanJunction bool = queryBuilder.bool().must(queryBuilder.all().createQuery());

FacetingRequest colorFacetRequest = queryBuilder.facet().name(FACET_COLOR).onField(FACET_COLOR)
.discrete().createFacetingRequest();

FacetingRequest sizeFacetRequest = queryBuilder.facet().name(FACET_SIZE).onField(FACET_SIZE)
.discrete().createFacetingRequest();

FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(bool.createQuery(), Product.class);
fullTextQuery.getFacetManager().enableFaceting(colorFacetRequest);
fullTextQuery.getFacetManager().enableFaceting(sizeFacetRequest);

if (!StringUtils.isEmpty(request.color))
{
fullTextQuery.getFacetManager().getFacets(FACET_COLOR)
.stream().filter(f -> f.getValue().equals(request.color)).forEach(found -> {
fullTextQuery.getFacetManager().getFacetGroup(FACET_COLOR).selectFacets(found);
});
}

if (!StringUtils.isEmpty(request.size))
{
fullTextQuery.getFacetManager().getFacets(FACET_SIZE)
.stream().filter(f -> f.getValue().equals(request.size)).forEach(found -> {
fullTextQuery.getFacetManager().getFacetGroup(FACET_SIZE).selectFacets(found);

});
}

List<SearchFacet> colorFacet = fullTextQuery.getFacetManager().getFacets(FACET_COLOR)
.stream().map(f -> new SearchFacet(f.getValue(), f.getCount())).collect(Collectors.toList());
List<SearchFacet> sizeFacet = fullTextQuery.getFacetManager().getFacets(FACET_SIZE)
.stream().map(f -> new SearchFacet(f.getValue(), f.getCount())).collect(Collectors.toList());

return new SearchResponse(sizeFacet, colorFacet, fullTextQuery.getResultList());

}

在 getFacets 方法之前禁用每个组似乎不是很干净

谢谢

最佳答案

已经有关于此的增强请求:https://hibernate.atlassian.net/browse/HSEARCH-713

关于java - 所选方面不应使用 hibernate 搜索过滤自己的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70243614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com