Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Spinx+PHP


Автор: Toti 4.12.2007, 01:39
Вот с чем я пытаюсь разобраться: http://www.sphinxsearch.com/

Там есть такой файлик spinxapi.php Может быть я тупой, плохо знаю английский или ещё что-нибудь... Короче говоря: затрудняюсь понять как с помощью php извлечь результаты поиска (содержимое все полей по каждой записи). На форуме на одном прочитал что надо пользоватся консольным поиском и парсить его результаты - не идиотизм ли это? Может кто-нибудь подскажет что-нибудь? Сталкивался с этой программой. Круто было бы если бы у ВАС имелись какие-нибудь исходники. В этом случае даже комментировать ничего не надо ))) Буду признателен за любую помощь!

Автор: izOne 6.12.2007, 12:57
sphinx для поиска, БД - для данных. 
sphinx даёт id документов, из базы по ним тянем все что касается этих id.

Код

<?php
require 'sphinxapi.php';
if($oRequest->isPost){
    $oSphinx = new SphinxClient();
    $oSphinx->SetServer('localhost', 3312);
    $oSphinx->setSortMode(SPH_SORT_RELEVANCE);
    $oSphinx->SetMatchMode(SPH_MATCH_EXTENDED);
    $sSearch = $aResults = false;
    foreach($oRequest->get(null) AS $k => $v){
        switch($k){
            case 'search':
                $sSearch = $v;
            break;
            case 'period':
                if($v > 0){
                    $iTime = time();
                    $oSphinx->->setFilterRange('created', $iTime - $v*86400, $iTime + $v*86400);
                }
            break;
            case 'limit':
                $oSphinx->SetLimits(0, (int)$v);
            break;
        }
    }
    if(null !== $oRequest->nick){
        $sSearch .= ' @nick '.$oRequest->nick;
    }
    if(!empty($sSearch)){
        $aSphinx = $oSphinx->Query($sSearch, 'album');
        // extend results
        if($aSphinx['total'] > 0){
            $aRecords = Component::get('Album')->getByIds(array_keys($aSphinx['matches']));
            $aRecordsById = array();
            foreach($aRecords AS $k => $aRecord){
                $aRecordsById[$aRecord['id']] = $aRecord;
            }
            $aResult = array();
            foreach($aSphinx['matches'] AS $id => $aRecord){
                $aResult[] = $aRecordsById[$id];
            }
        }
    }
}
?>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)