sphinx 在多表的情况下如何检索出具体数据

2014-08-11 16:20:15 +08:00
 letitbesqzr
在sphinx.conf里面定义了多个sourc对应多个index (每个index对应一个source)
看了半天文档,只发现有一个 sql_query_info的参数,设置为:
```
sql_query_info = select * from `表名` where id = $id
```

但发现只在search.exe也就是cmd测试下才会去执行...用api调用不会执行这个..
看到网上的例子,都是通过查询出来的id值然后链接mysql去查询...我这每个表的名字都没有规律,id值也没有规律..请问有没有办法能让api调用输出的时候带上是哪个source的结果..或者直接能输出其他字段的内容,而不是只输出id
6198 次点击
所在节点    MySQL
17 条回复
bjzhush
2014-08-11 16:24:12 +08:00
我之前做的是所有表的主键id都是连续的
比如 data_1 1-100W
data_2 100W-200W
data_3 200W-300W
这样检索出来id,就知道结果在哪个表了
bjzhush
2014-08-11 16:25:44 +08:00
以上我的做法是1个index对应多个source的
如果是1个source对应1个index,其实source的表名就是确定了的,各自分别配置就可以了
不过分的太多了,估计你查询起来不是太方便吧?
letitbesqzr
2014-08-11 16:33:00 +08:00
@bjzhush 我这大概12亿数据... 我试了 所有source分在一起..但 查询的时候检索不完,不知道为啥 只能查到第一个 source ..
letitbesqzr
2014-08-11 16:33:41 +08:00
@bjzhush 通过api查询 有办法得到某条数据是属于哪个source的么?
bjzhush
2014-08-11 16:39:26 +08:00
@letitbesqzr 这个项目我是去年做的了,用的是PHP的Sphinx API
具体数据里面有没有,我临时搜索了下
根据 http://php.net/manual/en/sphinx.examples.php 貌似是没有来自哪个source的
letitbesqzr
2014-08-11 16:41:24 +08:00
@bjzhush 貌似...真就...没办法了
bjzhush
2014-08-11 16:56:41 +08:00
@letitbesqzr 我觉得你做搜索了,数据却没有做好搜索的准备
加个全局UUID字段或许可以,不过非主键估计比较麻烦
另外就是单独copy出来提供给sphinx做数据源,不过又出现了维护,数据更新同步的额外开销..
letitbesqzr
2014-08-11 17:00:22 +08:00
@bjzhush "密码查询网站" 之类的东西,你懂得... 每个表是一个网站的数据.. 不需要更新 维护 请问有什么方案来做?
bjzhush
2014-08-11 17:02:26 +08:00
@letitbesqzr 我去年做的就是这个...
SheGongKu...
当时放了3亿数据进去,速度非常快
要不我打包卖你好了 ^_^ 包括查询整套代码,价格好说
letitbesqzr
2014-08-11 17:09:40 +08:00
@bjzhush 算了 - - 我12亿呢..加上soyun的没导入..估计有15e
bjzhush
2014-08-11 17:15:29 +08:00
你建400个表,分4组,每表1KW数据,也就是每组10亿数据,直接复制批量修改配置文件就OK了
这玩意要的是匹配,所以分开索引分开查是没问题的,你真的不要? 拿到就能直接导数据用哦,很便宜哦,哈哈
letitbesqzr
2014-08-11 17:16:38 +08:00
@bjzhush 但我这... 怎么能做到每表1Kw数据...
bjzhush
2014-08-11 17:21:12 +08:00
@letitbesqzr 每表1KW数据,为什么不是100W,为什么不是1亿 ?
因为这是Mysql的瓶颈临界值
数据往里导入就是了,11位int能放多少数据你自己算
你搞过这个没有?
bjzhush
2014-08-11 17:21:37 +08:00
@letitbesqzr 还是不在这扯了,和谐...
letitbesqzr
2014-08-11 17:35:19 +08:00
@bjzhush 实在不行,只有这样了,,,既然我每个表一个index...我就定义一个数组 - - 然后遍历数组挨个index去取数据吧...
bjzhush
2014-08-12 08:42:14 +08:00
@letitbesqzr 那样你检索还有整合结果会非常麻烦,而且整合后结果混乱无序.....
唉,浪费这么多时间瞎折腾,就是一毛不拔
letitbesqzr
2014-08-12 12:28:54 +08:00
@bjzhush 怎么会.... 直接foreach 循环就可以了,每个表都是带有来源字段的... 已经完成了.. 不过内存占用有点大.. 19亿数据了 占用了 启动searchd 占用了 30g内存.. 但检索都在一秒内

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX