Sphinx setFilter () убивает все результаты - PullRequest
1 голос
/ 05 сентября 2010

У меня установлен sphinx для моей поисковой системы, и он отлично работает, но сейчас я пытаюсь добавить несколько дополнительных функций к поиску, используя setFilter (), который должен позволять мне выполнять предложения WHERE / AND, но всякий раз, когда япопробуйте поиск, он не даст результатов, когда должен.

Это мой рабочий код:

 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" );

Теперь я хочу начать поиск с QUERY - AND item_site_id = 1.Я добавляю:

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

Затем я получаю следующую ошибку:

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

Я также пытался:

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

Это не таквыдает ошибку, но опять нет результатов.

Мой sphinx.conf выглядит так:

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
}

Может кто-нибудь сказать, что я делаю неправильно?

Я удалил конфиденциальные данные из кода.

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Не могли бы вы попробовать запустить эти команды из командной строки:

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

а сравнить выходы?

0 голосов
/ 05 сентября 2010

Хорошо, я нашел проблему в конце. Я забыл установить атрибут для item_site_id в файле sphinx.conf.

Затем с помощью $ cl-> SetFilter ('item_site_id', array (1)); я вытащил результаты.

Спасибо за всю информацию!

...