Hibernate Search对象到字符串桥

时间:2014-06-05 13:28:59

标签: java hibernate hibernate-search infinispan

我正在使用Infinispan 6.0.2和Hibernate Search 4.4.0。

在我的缓存中,有一些数据的值为hibernate_search_DSL(类型字符串)。当我使用关键字搜索hibernate时,它无法使用下划线(hibernate_search_DSL)找到结果。

我认为在Hibernate hibernate_search_DSL只是一个单词,所以我写了一个字符串桥试图将所有_替换为空格,但它不起作用。< / p>

这是我的班级:

public class NormaliseValue implements StringBridge{

    public String objectToString(Object object)
    {
        if(object == null)
            throw new IllegalArgumentException("There is no value to normalise");

        String value = object.toString();
        value.replaceAll("_", " ");
        return value;
    }
}

映射索引:

mapping.entity(Hibernate.class).indexed().providedId()
    .property("value", ElementType.FIELD).field().bridge(NormaliseValue.class);

有什么问题,或者使用下划线找到更简单的结果???

1 个答案:

答案 0 :(得分:2)

默认行为是使用StandardAnalyzer,它会破坏空格和符号上的输入字符串。 所以文字“hibernate_search_DSL”可能(我假设您正在使用默认分析器)被标记为不同的关键字“hibernate”,“search”和“dsl”(因为它也会降低外壳)。

全文的原则是,当您通过同一个分析器对查询进行标记时,它将根据部分进行匹配和评分。

如果要禁用此选项并仅使用完全匹配,请使用注释禁用属性上的Analyzer:

@Field(analyze = Analyze.NO)