sphinx 多表索引 怎么配置

2024-12-02 07:57:47
推荐回答(1个)
回答1:

1.一次性使用多个索引进行查询的时候,返回的结果集中的fields字段没有什么清楚的意义(也没有找到文档对它的说明)
2.如果程序中一次搜索使用了多个索引,如果它们配置文件中过滤用的属性(aql_attr_uint,sql_field_string...)不全相同,那么最终返回的结果集中,只包含这几个索引中共有的属性
实验:
建立两个索引:goods_brand, goods_cate, 分别是商品信息+品牌信息,商品信息+分类信息

1 sql_query = select gid, gid as goodsid, siteid, catename from v_goods_info_cate
2 sql_attr_uint = siteid
3 sql_attr_uint = goodsid
4 sql_field_string = catename
5
6 #######################
7
8 sql_query = select gid, gid as goodsid, siteid, brandname from v_goods_info_brand
9 sql_attr_uint = siteid
10 sql_attr_uint = goodsid
11 sql_field_string = brandname

注:
1. brandname 是商品的品牌名字, catename是商品的分类名字
2. brandname, catename 在索引时,既作为全文索引,又作为属性值返回
3. siteid在两个索引中都有,brandname和catename只在各自的索引中存在
测试程序代码
1 $sphObj->AddQuery($keyword, 'goods_brand');
2 $sphObj->AddQuery($keyword, 'goods_cate');
3 $sphObj->AddQuery($keyword, 'goods_cate, goods_brand');
4 $sphObj->AddQuery($keyword, 'goods_brand,goods_cate');
5
6 var_dump($rs[0]['fields'], $rs[0]['words'], $rs[0]['matches']);

注:
在程序中做控制:搜索"机"这个字,在goods_cate和goods_brand索引中各只有两条记录符合要求(一共有4条记录):
1.分别执行测试代码的第1行和第2行,并用第6行打印出结果:
View Code
注:
每个索引单独被使用时,各对应两条记录(一共有4条记录)
每条匹配记录中的'attrs'中有siteid+brandname,或者,siteid+catename

2.当用一次查询用多个索引时:分别执行第3行和第4行,并用第6行打印出结果:
View Code
注:
两个索引被同时使用,只有先后顺序不一样时,4条记录都得到了(这样的结果是对的)
但是第3行和第47行的代码键值对表明,返回的结果集中的fields值没有什么特别的含义(至少我不知到,难道只和排在前边的索引使用的全文索引字段同步?肯定有什么意义,只是我没有总结到吧)
另外,查看结果知道,每一条匹配记录的'attrs'数组中只有siteid键值对