我做这样的事情:
所以对于我上面的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
我得到了同样的错误。
答案 0 :(得分:0)
如果你想匹配(HI | Hi | hi),你可以明确定义每个,或者更好的是添加一个标志来触发不区分大小写的匹配:(?i)
regexp_filter = (?i)(HI)(\W+(?:\w+\W+){0,3}?(Manufacturing)\b) => upper_\1\2
答案 1 :(得分:0)
请记住,regex_filter也适用于查询。
所以你应该搜索
select Name from idx_Test WHERE MATCH('"HI Manufacturing"')
您不需要自己应用转换。事实上,在你的例子中,它将是“双重”。申请,一次由你,一次由狮身人面像,把它变成MATCH('"upper_upper_hi manufacturing"')
这就是为什么它不匹配。
混合案例'嗨'有点工作,因为正则表达式过滤器不会触发。请记住正则表达式区分大小写。
它仍然匹配,因为charset_table使匹配不区分大小写。