Sphins Regexp只映射到单个单词

时间:2018-01-30 14:09:51

标签: sphinx

我正在尝试映射正则表达式,因此当用户输入特定单词时,我强制他们在表格中选择一个特定的其他术语。

例如,我有一个简单的示例字段:

  • 鲍勃
  • Bob Smith
  • Bob Jones
  • 萨利
  • 莎莉史密斯
  • Sally Jones

如果我这样做

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

1 个答案:

答案 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,除非在$之后有空格!