我正在使用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);
有什么问题,或者使用下划线找到更简单的结果???
答案 0 :(得分:2)
默认行为是使用StandardAnalyzer,它会破坏空格和符号上的输入字符串。 所以文字“hibernate_search_DSL”可能(我假设您正在使用默认分析器)被标记为不同的关键字“hibernate”,“search”和“dsl”(因为它也会降低外壳)。
全文的原则是,当您通过同一个分析器对查询进行标记时,它将根据部分进行匹配和评分。
如果要禁用此选项并仅使用完全匹配,请使用注释禁用属性上的Analyzer:
@Field(analyze = Analyze.NO)