我想在查询的两边使用一个函数。 在SQL中,我会写s.th。喜欢
select xyzfun(colA) as A, xyzfun(colB) as B where A = B
或
select colA, colB where xyzfun(colA) = xyzfun(colB)
(无效的SQL,只是为了弄清楚我想要什么)。 在这种情况下,这是关于从Apache commons编解码器应用ColognePhonetic。
对于模糊搜索(特别是查找可能的重复实体),我目前正在使用Levensthein函数,但是,Levensthein在键入exp.Meirlüd时,很难找到“Maier-Lüdenscheidt”。简而言之。
public static BooleanExpression[] fuzzyLike(StringPath path, String value) {
return toLevenshtein1(value).stream()
.map(path::like)
.collect(Collectors.toList())
.toArray(new BooleanExpression[value.length()*2]);
}
所以我想用commons编解码器ColognePhonetic代替它。 但这必须应用于查询的两面,以免引起tabespace-scans。
public static BooleanExpression phoneticLike(StringPath path, String value) {
return Expressions.stringPath(toColognePhonetic(path.toString())).like(toColognePhonetic(value));
}
这可编译但不起作用:-D 而且由于我不是querdsl英雄,所以我希望了解如何实现这一点的一些想法。谢谢!