1
1
<?php
2
2
3
3
//
4
- // $Id: sphinxapi.php 2758 2011-04-04 11:10:44Z kevg $
4
+ // $Id: sphinxapi.php 2970 2011-09-23 16:50:22Z klirichek $
5
5
//
6
6
7
7
//
29
29
define ( "SEARCHD_COMMAND_FLUSHATTRS " , 7 );
30
30
31
31
/// current client-side command implementation versions
32
- define ( "VER_COMMAND_SEARCH " , 0x118 );
33
- define ( "VER_COMMAND_EXCERPT " , 0x103 );
32
+ define ( "VER_COMMAND_SEARCH " , 0x119 );
33
+ define ( "VER_COMMAND_EXCERPT " , 0x104 );
34
34
define ( "VER_COMMAND_UPDATE " , 0x102 );
35
35
define ( "VER_COMMAND_KEYWORDS " , 0x100 );
36
36
define ( "VER_COMMAND_STATUS " , 0x100 );
61
61
define ( "SPH_RANK_MATCHANY " , 5 );
62
62
define ( "SPH_RANK_FIELDMASK " , 6 );
63
63
define ( "SPH_RANK_SPH04 " , 7 );
64
- define ( "SPH_RANK_TOTAL " , 8 );
64
+ define ( "SPH_RANK_EXPR " , 8 );
65
+ define ( "SPH_RANK_TOTAL " , 9 );
65
66
66
67
/// known sort modes
67
68
define ( "SPH_SORT_RELEVANCE " , 0 );
84
85
define ( "SPH_ATTR_FLOAT " , 5 );
85
86
define ( "SPH_ATTR_BIGINT " , 6 );
86
87
define ( "SPH_ATTR_STRING " , 7 );
87
- define ( "SPH_ATTR_MULTI " , 0x40000000 );
88
+ define ( "SPH_ATTR_MULTI " , 0x40000001 );
89
+ define ( "SPH_ATTR_MULTI64 " , 0x40000002 );
88
90
89
91
/// known grouping functions
90
92
define ( "SPH_GROUPBY_DAY " , 0 );
@@ -405,6 +407,7 @@ class SphinxClient
405
407
var $ _anchor ; ///< geographical anchor point
406
408
var $ _indexweights ; ///< per-index weights
407
409
var $ _ranker ; ///< ranking mode (default is SPH_RANK_PROXIMITY_BM25)
410
+ var $ _rankexpr ; ///< ranking mode expression (for SPH_RANK_EXPR)
408
411
var $ _maxquerytime ; ///< max query time, milliseconds (default is 0, do not limit)
409
412
var $ _fieldweights ; ///< per-field-name weights
410
413
var $ _overrides ; ///< per-query attribute values overrides
@@ -453,6 +456,7 @@ function SphinxClient ()
453
456
$ this ->_anchor = array ();
454
457
$ this ->_indexweights = array ();
455
458
$ this ->_ranker = SPH_RANK_PROXIMITY_BM25 ;
459
+ $ this ->_rankexpr = "" ;
456
460
$ this ->_maxquerytime = 0 ;
457
461
$ this ->_fieldweights = array ();
458
462
$ this ->_overrides = array ();
@@ -735,10 +739,12 @@ function SetMatchMode ( $mode )
735
739
}
736
740
737
741
/// set ranking mode
738
- function SetRankingMode ( $ ranker )
742
+ function SetRankingMode ( $ ranker, $ rankexpr = "" )
739
743
{
740
744
assert ( $ ranker >=0 && $ ranker <SPH_RANK_TOTAL );
745
+ assert ( is_string ($ rankexpr ) );
741
746
$ this ->_ranker = $ ranker ;
747
+ $ this ->_rankexpr = $ rankexpr ;
742
748
}
743
749
744
750
/// set matches sorting mode
@@ -981,7 +987,10 @@ function AddQuery ( $query, $index="*", $comment="" )
981
987
$ this ->_MBPush ();
982
988
983
989
// build request
984
- $ req = pack ( "NNNNN " , $ this ->_offset , $ this ->_limit , $ this ->_mode , $ this ->_ranker , $ this ->_sort ); // mode and limits
990
+ $ req = pack ( "NNNN " , $ this ->_offset , $ this ->_limit , $ this ->_mode , $ this ->_ranker );
991
+ if ( $ this ->_ranker ==SPH_RANK_EXPR )
992
+ $ req .= pack ( "N " , strlen ($ this ->_rankexpr ) ) . $ this ->_rankexpr ;
993
+ $ req .= pack ( "N " , $ this ->_sort ); // (deprecated) sort mode
985
994
$ req .= pack ( "N " , strlen ($ this ->_sortby ) ) . $ this ->_sortby ;
986
995
$ req .= pack ( "N " , strlen ($ query ) ) . $ query ; // query itself
987
996
$ req .= pack ( "N " , count ($ this ->_weights ) ); // weights
@@ -1234,7 +1243,7 @@ function _ParseSearchResponse ( $response, $nreqs )
1234
1243
1235
1244
// handle everything else as unsigned ints
1236
1245
list (,$ val ) = unpack ( "N* " , substr ( $ response , $ p , 4 ) ); $ p += 4 ;
1237
- if ( $ type & SPH_ATTR_MULTI )
1246
+ if ( $ type== SPH_ATTR_MULTI )
1238
1247
{
1239
1248
$ attrvals [$ attr ] = array ();
1240
1249
$ nvalues = $ val ;
@@ -1243,6 +1252,15 @@ function _ParseSearchResponse ( $response, $nreqs )
1243
1252
list (,$ val ) = unpack ( "N* " , substr ( $ response , $ p , 4 ) ); $ p += 4 ;
1244
1253
$ attrvals [$ attr ][] = sphFixUint ($ val );
1245
1254
}
1255
+ } else if ( $ type ==SPH_ATTR_MULTI64 )
1256
+ {
1257
+ $ attrvals [$ attr ] = array ();
1258
+ $ nvalues = $ val ;
1259
+ while ( $ nvalues >0 && $ p <$ max )
1260
+ {
1261
+ $ attrvals [$ attr ][] = sphUnpackU64 ( substr ( $ response , $ p , 8 ) ); $ p += 8 ;
1262
+ $ nvalues -= 2 ;
1263
+ }
1246
1264
} else if ( $ type ==SPH_ATTR_STRING )
1247
1265
{
1248
1266
$ attrvals [$ attr ] = substr ( $ response , $ p , $ val );
@@ -1326,6 +1344,8 @@ function BuildExcerpts ( $docs, $index, $words, $opts=array() )
1326
1344
if ( !isset ($ opts ["allow_empty " ]) ) $ opts ["allow_empty " ] = false ;
1327
1345
if ( !isset ($ opts ["passage_boundary " ]) ) $ opts ["passage_boundary " ] = "none " ;
1328
1346
if ( !isset ($ opts ["emit_zones " ]) ) $ opts ["emit_zones " ] = false ;
1347
+ if ( !isset ($ opts ["load_files_scattered " ]) ) $ opts ["load_files_scattered " ] = false ;
1348
+
1329
1349
1330
1350
/////////////////
1331
1351
// build request
@@ -1342,6 +1362,7 @@ function BuildExcerpts ( $docs, $index, $words, $opts=array() )
1342
1362
if ( $ opts ["load_files " ] ) $ flags |= 128 ;
1343
1363
if ( $ opts ["allow_empty " ] ) $ flags |= 256 ;
1344
1364
if ( $ opts ["emit_zones " ] ) $ flags |= 512 ;
1365
+ if ( $ opts ["load_files_scattered " ] ) $ flags |= 1024 ;
1345
1366
$ req = pack ( "NN " , 0 , $ flags ); // mode=0, flags=$flags
1346
1367
$ req .= pack ( "N " , strlen ($ index ) ) . $ index ; // req index
1347
1368
$ req .= pack ( "N " , strlen ($ words ) ) . $ words ; // req words
@@ -1687,5 +1708,5 @@ function FlushAttributes ()
1687
1708
}
1688
1709
1689
1710
//
1690
- // $Id: sphinxapi.php 2758 2011-04-04 11:10:44Z kevg $
1711
+ // $Id: sphinxapi.php 2970 2011-09-23 16:50:22Z klirichek $
1691
1712
//
0 commit comments