我在做这样的事情:
例如,对于上面的HI,我会这样做:
regexp_filter = (HI)(\W+(?:\w+\W+){0,3}?(Manufacturing)\b) => upper_\1\2我使用\2是因为
https://regex101.com/r/uZ4zK1/1第二个捕获组给了我所需要的领先空间,所以这个术语(理论上)变成了
upper_HI Manufacturing我的问题是,在这个过程中的某个地方,"Hi“只被认为是”嗨“。
下列任何一项都与索引记录匹配:
select Name from idx_Test WHERE (MATCH('"upper_Hi Manufacturing"'))
select Name from idx_Test WHERE (MATCH('"upper_Hi" "Manufacturing"'))
select Name from idx_Test WHERE (MATCH('"upper_Hi"'))所有这些操作都失败了:
select Name from idx_Test WHERE (MATCH('"upper_HI Manufacturing"'))
select Name from idx_Test WHERE (MATCH('"upper_HI" "Manufacturing"'))
select Name from idx_Test WHERE (MATCH('"upper_HI"'))即使我明确地强制"HI“在:
regexp_filter = (HI)(\W+(?:\w+\W+){0,3}?(Manufacturing)\b) => upper_HI\2我也会犯同样的错误。
发布于 2015-12-27 10:05:07
请记住,regex_filter也应用于查询。
所以你应该去找
select Name from idx_Test WHERE MATCH('"HI Manufacturing"')你不需要自己应用转换。事实上,在您的例子中,它将是“双”应用,一次由您,一次由斯芬克斯,将它转化为MATCH('"upper_upper_hi manufacturing"'),这就是为什么它不匹配。
混合情况下的“Hi”类工作,因为regex过滤器不会触发。记住regex是区分大小写的。
它仍然匹配,因为charset_table使得匹配不区分大小写。
发布于 2015-12-27 03:07:24
如果你想匹配(hi\hi/hi),那么你可以显式地定义每一个,或者更好地添加一个标志来触发不区分大小写的匹配:(?i)
regexp_filter = (?i)(HI)(\W+(?:\w+\W+){0,3}?(Manufacturing)\b) => upper_\1\2https://stackoverflow.com/questions/34476664
复制相似问题