Sphinx中可能出现RegexP_Filter错误?

时间:2015-12-27 00:50:13

标签: regex sphinx

我做这样的事情:

  • 将大写缩略语(也称为HI = Hawaii)替换为upper_ $ Accronym以供将来搜索。
  • 模式匹配。

所以对于我上面的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

我得到了同样的错误。

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使匹配不区分大小写。