2014-06-21 7 views
2

J'essaye de mettre en place une requête simple (prise d'une recherche d'utilisateur), pour trouver des résultats dans ce qui est actuellement une table simple des titres de livre et des auteurs. J'utilise juste cela comme un test pour comprendre un peu Sphinx.Correspondance partielle ou exacte dans Sphinx

Mon PHP est jusqu'à présent ceci:

$oSphinx->setFieldWeights(array('title' => 50, 'author' => 10)); 
$oSphinx->setMatchMode(SPH_MATCH_EXTENDED2); 
$oSphinx->setSortMode(SPH_SORT_RELEVANCE); 
$oSphinx->setRankingMode(SPH_RANK_SPH04); 
$rMatches = $oSphinx->query('Sarah J. Maas'); 

Ma longueur maximale infix et mot sont 3, donc je suppose le "J." est retiré de la requête à des fins de recherche. Mon problème est que ces 2 résultats sont retournés:

Sarah J. Maaster

Sarah J. Maas

Ils ont tous deux la même pondération, et ils apparaissent dans l'ordre dans l'ensemble de données, de sorte que est l'ordre Sphinx les renvoie. Existe-t-il un moyen de pondérer le "exact" match au-dessus du plus flou? Je sais qu'il existe un modificateur exact_hit mais cela ne semble pas avoir d'effet ici (il est contenu dans SPH_RANK_SPH04 de toute façon). Mon attente serait que le second aurait une pondération plus élevée parce que "Maas" correspond à un mot entier dans ce résultat et non à une sous-chaîne, mais cela ne semble pas être le cas. J'utilise Sphinx 2.0.4 (paquet Ubuntu 14.04 LTS).

Merci!

+0

Utilisez-vous une morphologie qui pourrait se retourner '' Maaster' dans Maas'? –

Répondre

Questions connexes