我有一个mysql查询,其中我做了类似的事情:

Select FieldX from TableY where FieldX regexp '[0-9] VariableString'


问题在于VariableString中的值可以包含许多具有同义词的不同单词。我已经将这些映射到我的Sphinx索引中,但是我不能这么substring_index或任何类似于extract的东西。那哪里

Select FieldX from idx_TableY where Match('Bob')


将找到Bob WilliamsRobert Williams,它将不会从任何一个中提取“威廉斯”。

MySQL将“威廉斯”

Select Substring_index(FieldX,'Bob ',-1) where FieldX regexp '[[:<:]]Bob[[:>:]]'


但不适用于Robert Williams

有没有办法结合两者的功能,或者以某种方式让正则表达式查询索引的全文而不是字段本身?

最佳答案

您所说的“提取”实际上应该只在应用程序本身中完成。 Sphinx将为您返回完全匹配的文本字段。

然后,应用程序本身可以提取所需的部分(类似于您使用Substring_index的示例)

<?php
$r = mysql_query("Select FieldX from idx_TableY where Match('Bob')");
while($row=mysql_fetch_assoc($r)) {
   $v = preg_replace('/\d+\s+/','',$row['FieldX']);
   print "$v\n";
}


或类似。可以根据需要定制preg_replace匹配项。

09-26 08:13