php sphinx 多表查询,sphinx多屬性查找過濾配置

情景:

有一個商品表goods,一個商品對應多個種類標籤。如下結構:

goods_id type_ids

1 1,2,3

2 2,3,4

3 3,4,5

當我要查找種類為4的商品id的時候,就要用到sphinx的多屬性配置了。

主要配置如下:

source src1

{

type = mysql

sql_host = 127.0.0.1

sql_user = search

sql_pass =

sql_db = test

sql_query = select goods_id,type_ids from goods

sql_attr_multi = uint type_ids from field;#配置type_ids為多屬性

sql_ranged_throttle = 0

}

然後我們在php中可以這樣搜索過濾了:

$sphinx->setFilter('type_id', array(2,3,4));

是表示含有标签值2,3,4中的任意一个即符合筛选,这里是or关系。

$sphinx->setFilter('type_id', array(2));

$sphinx->setFilter('type_id', array(3));

$sphinx->setFilter('type_id', array(4));

设置三个filter是标示,要同时满足2,3,4三个属性值才符合,这里是and关系。

Sphinx sql_attr_multi配置参考

在Sphinx中,有一个MVA属性,声明格式如下(用反斜线只是为了清晰,您仍可以在一行之内完成声明):

sql_attr_multi = ATTR-TYPE ATTR-NAME ‘from’ SOURCE-TYPE \

[;QUERY] \

[;RANGE-QUERY]

其中

ATTR-TYPE 是 ‘uint’ 或 ‘timestamp’之一

SOURCE-TYPE 是 ‘field’, ‘query’, 或 ‘ranged-query’之一

QUERY 是用来取得全部(文档 ID,属性值)序对的 SQL 查询

RANGE-QUERY 是用来取得文档 ID 的最小值与最大值的 SQL 查询,

与’sql_query_range’类似

示例:

sql_attr_multi = uint tag from field;

sql_attr_multi = uint tag from query; SELECT id, tag FROM tags

sql_attr_multi = uint tag from ranged-query; \

SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \

SELECT MIN(id), MAX(id) FROM tags

使用field类型时,field字段的值应该是以英文逗号隔开的多个无符号32位整数,如:1,2,3,4

使用query或者ranged-query时,每行一个值,一个id对应多个(多行)tag值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值