在 sphinx 索引中使用 regexp_filters

using regexp_filters in sphinx index

我正在尝试使用 regexp_filter 替换特定的单词后缀,因为我发现 stem_en 和词形还原器会引发意外结果。

我试过了

regexp_filter = (.*)(graphical|graphic|graph) => graphy

但由于某种原因,'Biography' 的搜索与 'Biographical'

不匹配

我在 regex101 中检查了我的正则表达式是否有效:

https://regex101.com/r/zM9jY5/1

至少就找到模式和组而言

我在 sphinx 中检查了 simple/direct 替换

regexp_filter = Biographical => Biography

有效。

很明显正则表达式模式匹配并且 regexp_filter 替换显然有效。以某种方式使用

(.*)(graphical|graphic|graph) => graphy

无法识别组或模式?

实际上,捕获换行符以外的任意数量的字符(使用 .*)并捕获它们以在稍后的替换中恢复它们是没有意义的。

你可以直接使用

graphical|graphic|graph

并替换为graphy

看到这个regex demo

如果您不要想要匹配整个单词 graphicgraph,您可以使用

graphical|\bgraphic\b|\bgraph\b