从Sphinx索引中删除左括号和右括号
我有一个从Sphinx索引中删除左括号和右括号,sphinx,Sphinx,我有一个regexp\u过滤器,它在我的文档中查找模式,例如 regexp\u filter=Bob Smith=>Robert Smith 但是,我发现当模式文本位于括号内时,这不起作用,例如 他和我的老板(鲍勃·史密斯)应该 我尝试了一些方法来摆脱( 在停止字中添加了() 添加了不包含paren的自定义字符集 但无论如何,当模式位于括号内时,它们是不匹配的 是否有任何方法可以正确执行此操作 更新是,连字符也会发生同样的情况。即使我在Stopwords或Charset中明确删除它们,或者甚至创
regexp\u过滤器
,它在我的文档中查找模式,例如
regexp\u filter=Bob Smith=>Robert Smith
但是,我发现当模式文本位于括号内时,这不起作用,例如
他和我的老板(鲍勃·史密斯)应该
我尝试了一些方法来摆脱(
在停止字中添加了(
)
添加了不包含paren的自定义字符集
但无论如何,当模式位于括号内时,它们是不匹配的
是否有任何方法可以正确执行此操作
更新是,连字符也会发生同样的情况。即使我在Stopwords
或Charset
中明确删除它们,或者甚至创建一个regexp来删除它们
regexp\u过滤器=-=>
它们被编入索引并打破任何正则表达式,特别是有单词边界的正则表达式
因此:
regepx\u过滤器=\bBob\b=>Robert
在文本中失败,如“收件人:Bob Mark John”`
`如果在charset_表中添加括号(表示它是与“a”类似的有效字符),则表示(Bob Smith)变为(Robert Smith)。
“Robert Smith
”将不匹配“(Robert Smith)
”。只有启用内插并执行通配符搜索(如“*Robert Smith*
”),才能进行此匹配
只有在确定需要特殊字符作为用于构造单词的有效字符时,才应向chartset_表中添加特殊字符。是的,我刚刚发现了这一点。问题是,无论我如何使用连字符,它都不会充当单词分隔符。我尝试将其作为忽略字符,但发现这会将“abc def”变成“abcdef”,而不是应该使用的字符当连字符不在字符集中时发生“abc def”。然而,很明显,连字符不起单词分隔符的作用,即使a)不在字符集中b)不忽略字符。忽略字符去掉字符-这意味着被忽略的字符变为“空”,因此前后的字符都被粘合(!)。忽略字符不是分词符。分词符是任何未声明的字符。如果在搜索字符串中使用连字符,请尝试转义它(因为连字符是语法运算符)。你在SHOW META中得到了什么?确保源代码中没有额外的新行(即换行),例如,如果Bob和Smith之间有新行,正则表达式将不匹配。(regexp_过滤器适用于原始输入文本,而不是根据字符集_表对其进行标准化(标记化)后。