我有一个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 Williams
或Robert 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匹配项。