\tconnect to searchd at host HOST\n" ); print ( "-p, --port\t\tconnect to searchd at port PORT\n" ); print ( "-i, --index \tsearch through index(es) specified by IDX\n" ); print ( "-s, --sortby \tsort matches by 'CLAUSE' in sort_extended mode\n" ); print ( "-S, --sortexpr \tsort matches by 'EXPR' DESC in sort_expr mode\n" ); print ( "-a, --any\t\tuse 'match any word' matching mode\n" ); print ( "-b, --boolean\t\tuse 'boolean query' matching mode\n" ); print ( "-e, --extended\t\tuse 'extended query' matching mode\n" ); print ( "-ph,--phrase\t\tuse 'exact phrase' matching mode\n" ); print ( "-f, --filter \tfilter by attribute 'ATTR' (default is 'group_id')\n" ); print ( "-fr,--filterrange \n\t\t\tadd specified range filter\n" ); print ( "-v, --value \tadd VAL to allowed 'group_id' values list\n" ); print ( "-g, --groupby \tgroup matches by 'EXPR'\n" ); print ( "-gs,--groupsort \tsort groups by 'EXPR'\n" ); print ( "-d, --distinct \tcount distinct values of 'ATTR''\n" ); print ( "-l, --limit \tretrieve COUNT matches (default: 20)\n" ); print ( "--select \tuse 'EXPRLIST' as select-list (default: *)\n" ); exit; } $args = array(); foreach ( $_SERVER["argv"] as $arg ) $args[] = $arg; $cl = new SphinxClient (); $q = ""; $sql = ""; $mode = SPH_MATCH_ALL; $host = "localhost"; $port = 9312; $index = "*"; $groupby = ""; $groupsort = "@group desc"; $filter = "group_id"; $filtervals = array(); $distinct = ""; $sortby = ""; $sortexpr = ""; $limit = 20; $ranker = SPH_RANK_PROXIMITY_BM25; $select = ""; for ( $i=0; $iSetFilterRange ( $args[++$i], $args[++$i], $args[++$i] ); else if ( $arg=="-r" ) { $arg = strtolower($args[++$i]); if ( $arg=="bm25" ) $ranker = SPH_RANK_BM25; if ( $arg=="none" ) $ranker = SPH_RANK_NONE; if ( $arg=="wordcount" )$ranker = SPH_RANK_WORDCOUNT; if ( $arg=="fieldmask" )$ranker = SPH_RANK_FIELDMASK; if ( $arg=="sph04" ) $ranker = SPH_RANK_SPH04; } else $q .= $args[$i] . " "; } //////////// // do query //////////// $cl->SetServer ( $host, $port ); $cl->SetConnectTimeout ( 1 ); $cl->SetArrayResult ( true ); $cl->SetWeights ( array ( 100, 1 ) ); $cl->SetMatchMode ( $mode ); if ( count($filtervals) ) $cl->SetFilter ( $filter, $filtervals ); if ( $groupby ) $cl->SetGroupBy ( $groupby, SPH_GROUPBY_ATTR, $groupsort ); if ( $sortby ) $cl->SetSortMode ( SPH_SORT_EXTENDED, $sortby ); if ( $sortexpr ) $cl->SetSortMode ( SPH_SORT_EXPR, $sortexpr ); if ( $distinct ) $cl->SetGroupDistinct ( $distinct ); if ( $select ) $cl->SetSelect ( $select ); if ( $limit ) $cl->SetLimits ( 0, $limit, ( $limit>1000 ) ? $limit : 1000 ); $cl->SetRankingMode ( $ranker ); $res = $cl->Query ( $q, $index ); //////////////// // print me out //////////////// if ( $res===false ) { print "Query failed: " . $cl->GetLastError() . ".\n"; } else { if ( $cl->GetLastWarning() ) print "WARNING: " . $cl->GetLastWarning() . "\n\n"; print "Query '$q' retrieved $res[total] of $res[total_found] matches in $res[time] sec.\n"; print "Query stats:\n"; if ( is_array($res["words"]) ) foreach ( $res["words"] as $word => $info ) print " '$word' found $info[hits] times in $info[docs] documents\n"; print "\n"; if ( is_array($res["matches"]) ) { $n = 1; print "Matches:\n"; foreach ( $res["matches"] as $docinfo ) { print "$n. doc_id=$docinfo[id], weight=$docinfo[weight]"; foreach ( $res["attrs"] as $attrname => $attrtype ) { $value = $docinfo["attrs"][$attrname]; if ( $attrtype==SPH_ATTR_MULTI || $attrtype==SPH_ATTR_MULTI64 ) { $value = "(" . join ( ",", $value ) .")"; } else { if ( $attrtype==SPH_ATTR_TIMESTAMP ) $value = date ( "Y-m-d H:i:s", $value ); } print ", $attrname=$value"; } print "\n"; $n++; } } } // // $Id: test.php 2903 2011-08-04 13:30:49Z shodan $ // ?>