在 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
如果您不要想要匹配整个单词 graphic
和 graph
,您可以使用
graphical|\bgraphic\b|\bgraph\b
我正在尝试使用 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
如果您不要想要匹配整个单词 graphic
和 graph
,您可以使用
graphical|\bgraphic\b|\bgraph\b