sphinx 同时使用多个索引进行检索探究
2014年2月15日 11:24:34
结论:
1.一次性使用多个索引进行查询的时候,返回的结果集中的fields字段没有什么清楚的意义(也没有找到文档对它的说明)
2.如果程序中一次搜索使用了多个索引,如果它们配置文件中过滤用的属性(aql_attr_uint,sql_field_string...)不全相同,那么最终返回的结果集中,只包含这几个索引中共有的属性
实验:
建立两个索引:goods_brand, goods_cate, 分别是商品信息+品牌信息,商品信息+分类信息
sql_query = select gid, gid as goodsid, siteid, catename from v_goods_info_cate
sql_attr_uint = siteid
sql_attr_uint = goodsid
sql_field_string = catename ####################### sql_query = select gid, gid as goodsid, siteid, brandname from v_goods_info_brand
sql_attr_uint = siteid
sql_attr_uint = goodsid
sql_field_string = brandname
注:
1. brandname 是商品的品牌名字, catename是商品的分类名字
2. brandname, catename 在索引时,既作为全文索引,又作为属性值返回
3. siteid在两个索引中都有,brandname和catename只在各自的索引中存在
测试程序代码
$sphObj->AddQuery($keyword, 'goods_brand');
$sphObj->AddQuery($keyword, 'goods_cate');
$sphObj->AddQuery($keyword, 'goods_cate, goods_brand');
$sphObj->AddQuery($keyword, 'goods_brand,goods_cate'); var_dump($rs[0]['fields'], $rs[0]['words'], $rs[0]['matches']);
注:
在程序中做控制:搜索"机"这个字,在goods_cate和goods_brand索引中各只有两条记录符合要求(一共有4条记录):
1.分别执行测试代码的第1行和第2行,并用第6行打印出结果:
//goods_brand
array (size=1)
0 => string 'brandname' (length=9) array (size=1)
'机' =>
array (size=2)
'docs' => string '10049' (length=5)
'hits' => string '10049' (length=5) array (size=2)
0 =>
array (size=3)
'id' => string '157978' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=3)
'goodsid' => string '157978' (length=6)
'siteid' => string '102' (length=3)
'brandname' => string '无锡一机' (length=12)
1 =>
array (size=3)
'id' => string '157980' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=3)
'goodsid' => string '157980' (length=6)
'siteid' => string '102' (length=3)
'brandname' => string '无锡一机' (length=12) //goods_cate
array (size=1)
0 => string 'catename' (length=8) array (size=1)
'机' =>
array (size=2)
'docs' => string '43986' (length=5)
'hits' => string '43986' (length=5) array (size=2)
0 =>
array (size=3)
'id' => string '158010' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=3)
'goodsid' => string '158010' (length=6)
'siteid' => string '102' (length=3)
'catename' => string '磨齿机' (length=9)
1 =>
array (size=3)
'id' => string '158014' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=3)
'goodsid' => string '158014' (length=6)
'siteid' => string '102' (length=3)
'catename' => string '旋压机' (length=9)
注:
每个索引单独被使用时,各对应两条记录(一共有4条记录)
每条匹配记录中的'attrs'中有siteid+brandname,或者,siteid+catename
2.当用一次查询用多个索引时:分别执行第3行和第4行,并用第6行打印出结果:
//goods_brand在前,goods_cate在后
array (size=1)
0 => string 'brandname' (length=9) array (size=1)
'机' =>
array (size=2)
'docs' => string '54035' (length=5)
'hits' => string '54035' (length=5) array (size=4)
0 =>
array (size=3)
'id' => string '157978' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '157978' (length=6)
'siteid' => string '102' (length=3)
1 =>
array (size=3)
'id' => string '157980' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '157980' (length=6)
'siteid' => string '102' (length=3)
2 =>
array (size=3)
'id' => string '158010' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '158010' (length=6)
'siteid' => string '102' (length=3)
3 =>
array (size=3)
'id' => string '158014' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '158014' (length=6)
'siteid' => string '102' (length=3) //goods_cate在前,goods_brand在后
array (size=1)
0 => string 'catename' (length=8) array (size=1)
'机' =>
array (size=2)
'docs' => string '54035' (length=5)
'hits' => string '54035' (length=5) array (size=4)
0 =>
array (size=3)
'id' => string '157978' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '157978' (length=6)
'siteid' => string '102' (length=3)
1 =>
array (size=3)
'id' => string '157980' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '157980' (length=6)
'siteid' => string '102' (length=3)
2 =>
array (size=3)
'id' => string '158010' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '158010' (length=6)
'siteid' => string '102' (length=3)
3 =>
array (size=3)
'id' => string '158014' (length=6)
'weight' => string '1' (length=1)
'attrs' =>
array (size=2)
'goodsid' => string '158014' (length=6)
'siteid' => string '102' (length=3)
注:
两个索引被同时使用,只有先后顺序不一样时,4条记录都得到了(这样的结果是对的)
但是第3行和第47行的代码键值对表明,返回的结果集中的fields值没有什么特别的含义(至少我不知到,难道只和排在前边的索引使用的全文索引字段同步?肯定有什么意义,只是我没有总结到吧)
另外,查看结果知道,每一条匹配记录的'attrs'数组中只有siteid键值对
sphinx 同时使用多个索引进行检索探究的更多相关文章
- 使用Lucene索引和检索POI数据
1.简介 关于空间数据搜索,以前写过<使用Solr进行空间搜索>这篇文章,是基于Solr的GIS数据的索引和检索. Solr和ElasticSearch这两者都是基于Lucene实现的,两 ...
- InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将使用表锁!
InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来实现的. InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoD ...
- Lucene 索引与检索架构图
- solr-用mmseg4j配置同义词索引和检索(IKanlyzer需要修改源码适应solr接口才能使用同义词功能)
概念说明:同义词大体的意思是指,当用户输入一个词时,solr会把相关有相同意思的近义词的或同义词的term的语段内容从索引中取出,展示给用户,提高交互的友好性(当然这些同义词的定义是要在配置文件中事先 ...
- sphinx通过增量索引实现近实时更新
一.sphinx增量索引实现近实时更新设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少. 例如.原来的数据 ...
- Sphinx和coreseek检索引擎
Sphinx是检索英文用,coreseek是检索中文用. Sphinx(斯芬克斯)是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索 ...
- sphinx 增量索引 实现近实时更新
一.sphinx增量索引的设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万条 ...
- Sphinx 增量索引更新
是基于PHP API调用,而不是基于sphinxSE.现在看来sphinxSE比API调用更简单的多,因为之前没有想过sphinxSE,现在先把API的弄明白.涉及到的:sphinx 数据源的设置,简 ...
- sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)
一.sphinx增量索引的设置 数据库中的已有数据很大,又不断有新数据加入到数据库中,也希望能够检索到.全部重新建立索引很消耗资源,因为我们需要更新的数据相比较而言很少.例如.原来的数据有几百万 ...
随机推荐
- VS2013新建web项目时出错,系统找不到指定文件
好不容易找了一个VS2013_RTM_ULT_CHS来安装好,Key:BWG7X-J98B3-W34RT-33B3R-JVYW9 兴高采烈的打开vs2013,新建web项目,结果弹出一个错误: 傻眼了 ...
- [windows]转帖 windows 版本的含义
1.N是None的意思,由于欧洲反垄断法不让系统捆绑浏览器ie和播放器.LTSB全称为Long Term Support Branch,意思为长期支持分支,是给Windows 10企业用户的一个更新选 ...
- sysbench的安装与简单使用
1. 下载sysbench的文件 https://codeload.github.com/akopytov/sysbench/zip/1.0.15 2. 放进linux机器以及进行解压缩 unzip ...
- 六大Web负载均衡原理与实现
还有个姊妹篇也可以参考这个文章:LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式, LVS 实现了负载均衡,NAT,DR,TUN zookeeper使用ZA ...
- 两种常用文件分享方式 - 网络硬盘快速分享, 点对点的文件共享 BitTorrent Sync
普通的用户经常通过电子邮件.QQ传递等方式进行文件的分享,但是由于不同的网络环境有的时候可能会有不同的限制,所以我们就需要寻找其他的方式来替代.今天就为大家推荐两个既常用又与众不同的分享方式. 中国论 ...
- npm 切换淘宝镜像几种方式
淘宝 npm 地址: http://npm.taobao.org/ 如何使用 有很多方法来配置npm的registry地址,下面根据不同情境列出几种比较常用的方法.以淘宝npm镜像举例: 1.临时使用 ...
- 11Java网络编程
十一.网络编程 11.1 网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对 ...
- (转)远程连接webservice遇到无法访问的问题解决办法
原帖:http://stu-xu.i.sohu.com/blog/view/170429191.htm 如果在本地测试webservice可以运行,在远程却显示“测试窗体只能用于来自本地计算机的请求” ...
- bzoj4152 The Captain (dijkstra)
做dijkstra,但只需要贪心地把每个点连到它左边.右边.上边.下面的第一个点就可以了 #include<bits/stdc++.h> #define pa pair<int,in ...
- 洛谷P2469 星际竞速
上下界费用流比较无脑,提供一种更巧妙的费用流,无需上下界. #include <cstdio> #include <algorithm> #include <queue& ...