2016-07-16 22 views
0

Ich habe eine MySQL-Abfrage, wo in ich etwas tun ähnlich wie:Sphinx mit MySql Regex kombinieren?

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

Das Problem ist, die Werte in variable können viele verschiedene Wörter enthalten, die Synonyme haben. Ich habe diese bereits in meinem Sphinx-Index abgebildet, kann aber nicht so substring_index oder ähnliches extrahieren. Also, wo

Select FieldX from idx_TableY where Match('Bob') 

finden Bob Williams oder Robert Williams es wird nicht extrahieren ‚Williams‘ von entweder.

Mysql wird 'Williams' für

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

aber nicht auf Robert Williams arbeiten.

Gibt es eine Möglichkeit, die Features von beiden zu kombinieren oder irgendwie regexp den indizierten Volltext abzufragen, anstatt nur das Feld selbst?

Antwort

0

Die 'Extraktion', über die Sie sprechen, sollte eigentlich nur in der Anwendung selbst gemacht werden. Sphinx wird Ihnen das vollständig übereinstimmende Textfeld zurückgeben.

Dann wird die Anwendung selbst, kann nur den Teil extrahieren (ähnlich wie Ihr Beispiel für die Verwendung 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"; 
} 

oder ähnlich will. Kann die preg_replace-Übereinstimmung nach Bedarf anpassen.