2016-07-16 6 views
0

У меня есть MySQL запросов где я сделать что-то подобное:Комбинируйте сфинкс с MySql Regex?

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

Проблема заключается в том, что значения в VariableString может содержать много различных слов, которые имеют синонимы. Я уже сопоставил их в своем индексе Sphinx, но я не могу так substring_index или что-то подобное извлечению. Так где

Select FieldX from idx_TableY where Match('Bob') 

Найдет Bob Williams или Robert Williams не извлечет «Уильямс» из любого.

Mysql будет 'Williams' для

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

, но не будет работать на Robert Williams.

Есть ли способ объединить функции обоих или каким-то образом запросить regexp индексированный полный текст вместо самого поля?

ответ

0

«Извлечение», о котором вы говорите, действительно должно быть сделано в самом приложении. 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.