2010-09-05 6 views
1

J'ai installé sphinx pour mon moteur de recherche, et ça fonctionne très bien, mais maintenant j'essaie d'ajouter quelques fonctionnalités supplémentaires à la recherche en utilisant setFilter() qui devrait me permettre de faire O WH?/AND clauses, mais chaque fois que j'essaie une recherche, elle ne renvoie aucun résultat quand il le faut.Sphinx setFilter() tue tous les résultats

Ceci est mon code de travail:

require_once ("sphinxapi.php"); 
$cl = new SphinxClient(); 
$cl->SetConnectTimeout (5); 
$cl->SetMatchMode (SPH_MATCH_BOOLEAN); 
$cl->SetSortMode (SPH_SORT_EXPR , "@weight"); 
$cl->SetFieldWeights (array ("item_title"=>100, "item_tags"=>99)); 
$cl->SetLimits(0, 1000, 1000, 1000); 
$cl->SetRankingMode (SPH_RANK_PROXIMITY_BM25); 
$cl->AddQuery($term, "indexTubelogr"); 

Maintenant, je veux commencer à chercher avec QUERY - AND item_site_id = 1. J'ajoute:

$cl->SetFilter('item_site_id', 1);

Puis-je obtenir l'erreur suivante:

Warning: assert() [function.assert]: Assertion failed in /home/domain.com/sphinxapi.php on line 810 

J'ai essayé aussi:

$cl->SetFilter('item_site_id', array(1)); 

Cela n'a pas donné une erreur, mais encore une fois, aucun résultat .

Mon sphinx.conf ressemble:

source srcDomain 
{ 
     type         = mysql 
     sql_sock        = /tmp/mysql.sock 
     sql_attr_timestamp      = item_date 
     sql_ranged_throttle      = 0 
     sql_query_info       = SELECT * FROM items WHERE item_id=$id 
     sql_query        = \ 
       SELECT item_id, item_date, item_runtime, item_title, item_tags, item_site_id FROM items 
} 
index indexDomain 
{ 
     source     = srcDomain 
     path     = /opt/sphinx/var/data/domain 
     docinfo     = extern 
     mlock     = 0 
     morphology    = stem_en 
     min_word_len   = 2 
     charset_type   = sbcs 
     ignore_chars   = U+00AD 
     phrase_boundary   = ., ?, !, U+2026 # horizontal ellipsis 
     html_strip    = 0 
     preopen     = 1 
} 

Quelqu'un peut-il s'il vous plaît me dire ce que je fais mal?

J'ai supprimé les données sensibles du code.

Répondre

0

Ok, j'ai trouvé le problème à la fin. J'ai oublié de définir l'attribut pour item_site_id dans le fichier sphinx.conf.

Puis avec $ cl-> SetFilter ('item_site_id', array (1)); J'ai tiré les résultats.

Merci pour toutes les infos!

1

Pourriez-vous s'il vous plaît essayer d'exécuter ces commandes à partir de la ligne de commande:

search -i indexTubelogr myterm 
search -i indexTubelogr -f item_site_1 1 myterm 

et comparer les sorties?

+0

pour être honnête avec vous, je ne sais pas comment lancer des commandes sphinx via la ligne de commande. –

+0

@Godius: il suffit de copier et coller les commandes (en changeant 'myterm' à votre requête de recherche réelle) :) – Quassnoi

+0

Ok, j'ai obtenu la chose de ligne de commande working.using fichier de configuration '/opt/sphinx/etc/sphinx.conf' .. index 'indexTubelogr': erreur de recherche: aucun attribut de filtre 'item_site_id'. –

Questions connexes