Hibernate Search:facet on double不返回结果

时间:2012-06-26 20:59:49

标签: hibernate search lucene hibernate-search facet

我正在尝试将Hibernate Search应用到我的应用程序中,但我坚持将搜索结果限制在范围方面,以限制基于价格范围的结果。

我的代码(片段):

Product.java包含:

    @Field(analyze = Analyze.NO, store = Store.YES, bridge = @FieldBridge(impl = DoubleBridge.class))
@NumericField()
private double price = 0.0;

我的搜索处理程序,构建价格方面:

        FacetingRequest priceFacetingRequest = builder.facet()
            .name( "price" )
            .onField("price")
            .range()
            .below(10.0)
            .from(11.0).to(24.0)
            .from(25.0).to(49.0)
            .from(50.0).to(99.0)
            .from(100.0).to(199.0)
            .from(200.0).to(499.0)
            .from(500.0).to(999.0)
            .from( 1000.0 ).to( 1499.0 )
            .above( 1500.0 )
            .excludeLimit()
            .createFacetingRequest();

    facetManager.enableFaceting(priceFacetingRequest);

最后,在列出结果之前,通过以下方面之一限制结果:

facetManager.getFacetGroup( "price" ).selectFacets( rangeFacet );

我已经尝试了所有rangeFacets,但没有返回任何结果。 除了range()方面,我有不同的文本方面,它们操作相同,但通常会过滤结果。 此外,facetManager会调用facetRange结果的结果,但在调用fullTextQuery.list()时尝试仍会导致0结果。

我缺少什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我最终编写了一个FieldBridge,它将双重转录为字符串;

public class CoreDoubleBridge implements FieldBridge
{

@Override
public void set(String s, Object o, Document document, LuceneOptions luceneOptions)
{
    if (o instanceof Double)
    {
        NumericField field = new NumericField(s, Field.Store.YES, true);
        field.setDoubleValue((Double)o);
        document.add(field);

        Field fieldForFacet = new Field(s + ".facet", Double.toString((Double)o), Field.Store.YES, Field.Index.NOT_ANALYZED);
        document.add(fieldForFacet);
    }
}

}

并注明价格属性:

@Field(analyze = Analyze.NO, store = Store.YES)
@FieldBridge(impl = CoreDoubleBridge.class)
private Double price = 0.0;

我希望这可以帮助其他一些可怜的混蛋寻找解决方案来正确理解Double值;)