我正在尝试映射正则表达式,因此当用户输入特定单词时,我强制他们在表格中选择一个特定的其他术语。
例如,我有一个简单的示例字段:
如果我这样做
regexp_filter=Bob>Bob Smith
以确保用户只需输入Bob
我就推Bob Smith
然后进行sphinql
搜索:
Select * from Index where MATCH('Bob')
我仍然收到所有Bob
条记录(换句话说,它没有解释为Bob Smith
但是,如果我点头
regexp_filter=Bob=>Sally
然后Select * from Index where MATCH('Bob')
会返回所有Sally
条记录。
如果用户只是在Bob Jones
上搜索,我“只是”试图强制索引返回Bob
记录。
仅供参考我尝试了
Select * from Index where MATCH('^Bob$')
并返回NULL
答案 0 :(得分:0)
我仍然获得所有Bob记录(换句话说,它没有解释为Bob Smith
因为正则表达式在索引编制期间同时应用于查询文本和文档文本。因此变为MATCH('Bob Smith')
,但您的文档也变为
Bob Smith
Bob Smith Smith
Bob Smith Jones
...所以你的查询,匹配所有三个文件,如果没有正则表达式,则相同!
我只是"简直就是#34;如果用户只是搜索Bob,则尝试强制索引返回Bob Jones记录。
不知道你的意思是不应该回来?
...在这种情况下可以使用MATCH('^Bob$')
但记住删除正则表达式。或者也许可以使用MATCH('"^Bob$"')
一组额外的引号来使用短语模式。
请尝试使用空格MATCH('^Bob$ ')
!某些版本的sphinx有一个bug,除非在$
之后有空格!