84669人学习
65727人学习
82984人学习
467778人学习
498837人学习
471966人学习
256484人学习
152542人学习
85022人学习
11944人学习
20001人学习
60816人学习
5487人学习
15007人学习
2150人学习
6980人学习
194925人学习
359900人学习
1142人学习
19058人学习
3206人学习
180550人学习
48569人学习
17603人学习
40936人学习
1049人学习
750人学习
32909人学习
01.
CREATE
TABLE
email (
02.
emailid mediumint(8) unsigned
NOT
NULL
auto_increment COMMENT
'邮件id'
,
03.
04.
fromid
int
(10) unsigned
NOT
NULL
default
'0'
COMMENT
'发送人ID'
,
05.
06.
toid
int
(10) unsigned
NOT
NULL
default
'0'
COMMENT
'收件人ID'
,
07.
content text unsigned
NOT
NULL
COMMENT
'邮件内容'
,
08.
subject
varchar
(100) unsigned
NOT
NULL
COMMENT
'邮件标题'
,
09.
10.
sendtime
int
(10)
NOT
NULL
COMMENT
'发送时间'
,
11.
12.
attachment
varchar
(100)
NOT
NULL
COMMENT
'附件ID,以逗号分割'
,
PRIMARY
KEY
(emailid),
13.
) ENGINE=MyISAM';
01.
$sphinx
=
new
SphinxClient();
02.
03.
//sphinx的主机名和端口
04.
05.
$sphinx
->SetServer (
'loclahost'
, 9312 );
06.
07.
//设置返回结果集为php数组格式
08.
09.
$sphinx
->SetArrayResult ( true );
10.
11.
//匹配结果的偏移量,参数的意义依次为:起始位置,返回结果条数,最大匹配条数
12.
13.
$sphinx
->SetLimits(0, 20, 1000);
14.
15.
//最大搜索时间
16.
17.
$sphinx
->SetMaxQueryTime(10);
18.
19.
20.
21.
//执行简单的搜索,这个搜索将会查询所有字段的信息,要查询指定的字段请继续看下文
22.
23.
$index
=
'email'
//索引源是配置文件中的 index 类,如果有多个索引源可使用,号隔开:'email,diary' 或者使用'*'号代表全部索引源
24.
25.
$result
=
$sphinx
->query (
'搜索关键字'
,
$index
);
26.
27.
echo
'
';
print_r($result);
echo '
01.
//emailid的范围
02.
03.
$sphinx
->SetIdRange(
$min
,
$max
);
04.
05.
06.
07.
//属性过滤,可过滤的属性必需在配置文件中设置sql_attr_ ,之前我们定义了这些
08.
09.
sql_attr_uint = fromid
10.
11.
sql_attr_uint = toid
12.
13.
sql_attr_timestamp = sendtime
14.
15.
//如果你想再次修改这些属性,配置完成后记得重新建立索引才能生效
16.
17.
18.
19.
//指定一些值
20.
21.
$sphinx
->SetFilter(
'fromid'
,
array
(1,2));
//fromid的值只能是1或者2
22.
23.
//和以上条件相反,可增加第三个参数
24.
25.
$sphinx
->SetFilter(
'fromid'
,
array
(1,2), false);
//fromid的值不能是1或者2
26.
27.
//指定一个值的范围
28.
29.
$sphinx
->SetFilterRange(
'toid'
,
5, 200);
//toid的值在5-200之间
30.
31.
//和以上条件相反,可增加第三个参数
32.
33.
$sphinx
->SetFilterRange(
'toid'
,
5, 200, false);
//toid的值在5-200以外
34.
35.
36.
37.
//执行搜索
38.
39.
$result
=
$sphinx
->query(
'关键字'
,
'*'
);
01.
//使用属性排序
02.
03.
//以fromid倒序排序,注意当再次使用SetSortMode会覆盖上一个排序
04.
05.
$sphinx
->SetSortMode (
"SPH_SORT_ATTR_DESC"
,
'fromid'
);
06.
07.
//如果要使用多个字段排序可使用SPH_SORT_EXTENDED模式
08.
09.
//@id是sphinx内置关键字,这里指emailid,至于为什么是emailid,自己思考一下
10.
11.
$sphinx
->SetSortMode (
"SPH_SORT_ATTR_DESC"
,
'fromid ASC, toid DESC, @id DESC'
);
12.
13.
//执行搜索
14.
15.
$result
=
$sphinx
->query(
'关键字'
,
'*'
);
01.
//设置扩展匹配模式
02.
03.
$sphinx
->SetMatchMode (
"SPH_MATCH_EXTENDED2"
);
04.
05.
//查询中使用条件语句,字段用@开头,搜索内容包含测试,toid等于1的邮件:
06.
07.
$result
=
$sphinx
->query(
'@content (测试) & @toid =1'
,
'*'
);
08.
09.
//用括号和&(与)、|、(或者)、-(非,即!=)设置更复杂的条件
10.
11.
$result
=
$sphinx
->query(
'(@content (测试) & @subject =呃) | (@fromid -(100))'
,
'*'
);
12.
13.
//更多语法请查看官方文档匹配模式的说明
01.
//大于等于某一时间截$time
02.
03.
$sphinx
->SetFilterRange(
'sendtime'
,
$time
, 10000000000)
//时间截最大是10个9,再加1是不可超越了。。
04.
05.
06.
07.
//大于某一时间截$time
08.
09.
$sphinx
->SetFilterRange(
'sendtime'
,
$time
+1, 10000000000)
10.
11.
//小于等于某一时间截$time
12.
13.
$sphinx
->SetFilterRange(
'sendtime'
,
-1,
$time
)
//时间截最小是0,所以应该减1
14.
15.
//大于某一时间截$time
16.
17.
$sphinx
->SetFilterRange(
'sendtime'
,
-1,
$time
- 1)
01.
//设置完成记得重新建立索引
02.
03.
04.
05.
然后PHP中可以使用SetFilter()
06.
07.
//搜索包含附件ID为1或2邮件,mysql语法是这样FIND_IN_SET(`attachment`, '1,2')
08.
09.
$sphinx
->SetFilter(
'attachment'
,
array
(1,2))
10.
11.
//可以使用SetFilterRange,搜索包含附件ID在50-100范围的邮件
12.
13.
$sphinx
->SetFilterRange(
'attachment'
,
50, 100)
Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1
| 本站CDN由 数掘科技 提供