如何在查询中实现左侧函数(Querydsl,StringPath,BooleanExpression)

时间:2019-04-17 19:58:00

标签: querydsl

我想在查询的两边使用一个函数。 在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英雄,所以我希望了解如何实现这一点的一些想法。谢谢!

0 个答案:

没有答案