商品搜索方案 - MrLining/project GitHub Wiki
##搜索方案
##部署商品搜索实例 #目前我们线上SPHIN配置代码 svn地址 http://svn.meilishuo.com/repos/shop-backend/trunk/sphinx
#实例安装部署 一、安装 下载完代码后直接root执行 sh /home/work/mlservice/sphinx/script/install.sh
二、部署商品搜索索引服务 增加配置文件软连 ln -s /home/work/mlservice/sphinx/config/rdlab /home/work/mlservice/sphinx/config/index
初始化数据 执行 sh /home/work/mlservice/sphinx/config/index/goods.sh main restart 初始化完成之后 生成索引大约需要三十分钟左右 work权限下把如下代码放到crontab 里
#sphinx 增量索引更新
*/5 * * * * sh /home/work/mlservice/sphinx/config/index/goods.sh main rtupdate
#sphinx 全量索引更新
30 5,12,18 * * * sh /home/work/mlservice/sphinx/config/index/goods.sh main allup
三、查看服务是否启动完成
ps aux | grep '/home/service/coreseek/bin/searchd'
如果下面有这个进程 代码服务已经创建完成并且已经启动,
就可以提供搜索服务啦
四、代码目录说明 config目录 生成索引配置文件以及脚本管理文件(各个环境都不同) crontab 目录 定时任务文件(通用) mmseg 目录 分词相关 (通用) script 目录 公用脚本(通用)
五、线上机器 dfz-goods-sphinx-01 dfz-goods-sphinx-02 yz-goods-sphinx-01 yz-goods-sphinx-02 qxg-goods-sphinx-01 qxg-goods-sphinx-02 script.rdlab(线下rd测试机器) script.qalab(线下qa测试机器) 线上机器性能监测 页面里选择商品服务-》sphinx http://dashboard.falcon.meiliworks.com/screen/1411?cols=3
线上机器搜索服务耗时监控 http://bizfe.meilishuo.com/mon/sphinx
六、知识讲堂 1.sphinx 源码拆解之 索引的建立、分词、存储。 http://www.kuqin.com/shuoit/20141204/343689.html
#目前我们遇到的问题 1.实时性问题
**`#新增数据无法立马搜索怎么办?`**
之前我们采取主+增 主合并增的 架构方案 实际应用中发现新增数据延迟1分钟左右,为了解决这个问题 我们采取了 主+大增量+实时增量的架构方式来解决延时问题,目前的这种方案基本延迟时间在十秒内。
**`#实时更新字段有时不生效怎么办?`**
由于我们采用了主+大增量+实时增量的架构方式,基本上我们每时每刻都在合并索引,而sphinx实时更新字段属性的机制是先写到内存里,在写到磁盘里,如果更新的时候正好赶上更新的这条文档所在的数据的索引正在合并,就会导致当时成功了但是合并完索引就不成功了,为了解决这个问题我们又采取了实时更新字段也放到增量索引里。这样就保证了数据的一致性。
##简单说明
一、出售中的商品
- 链接:https://shop.meilishuo.com/goodsmg/onsale/#/index/status/saling
- 特殊查询:
a、商品审核状态查询:待审核、审核已通过、审核未通过
b、应季新款、是否是优质新款
二、预售商品
- 链接:https://shop.meilishuo.com/goodsmg/onpresell/#/index/status/onpresell
- 特殊查询:
a、预售时间大于当前时间的商品
b、全部、出售中、仓库中
c、应季新款、是否是优质新款
三、仓库中的商品
- 链接:https://shop.meilishuo.com/goodsmg/onstore/#/index
- 特殊查询:
a、风控下架、非风控下架
b、应季新款、是否是优质新款
前三个共用接口: mall: goodslist/Goods_list; vdoota:brdgoods/goods_list
四、单品实拍认证商品
- 链接:https://shop.meilishuo.com/goodsmg/onpresell/#/index/status/onpresell
- 接口:mall:pictureauth/goods_list_v2; vdoota:brdgoods/batch_goods_info
- 特殊查询:
a、全部、出售中、仓库中
b、提交实拍审核认证时间
c、实拍认证审核状态:未申请、待审核、审核通过、驳回、撤销认证
#搜索重构前后性能对比 ##重构前
virusdootabe层接口日志分析(/brdgoods/)
[rd@dfz-nx-01 zxlie]$ cat /home/service/nginx/logs/virusdootabe.access.2015112411.log
| grep '/brdgoods/'
| awk '{print $6}'
| awk '{split($0,request,"?");print request[1]}'
| sort | uniq -c | sort -nr
调用数量 | 接口路径 |
---|---|
19135 | /brdgoods/get_goods_category |
18760 | /brdgoods/Goods_list |
11478 | /brdgoods/goods_info |
4677 | /brdgoods/update_sku_repertory |
3618 | /brdgoods/batch_goods_info |
2635 | /brdgoods/goods_list |
1264 | /brdgoods/get_goods_mlzz_relation |
960 | /brdgoods/Get_goods_total_nums |
742 | /brdgoods/get_goods_info |
402 | /brdgoods/Batch_goods_info |
186 | /campaignprice/get_lock_property |
5 | /brdgoods/Get_goods_list |
#####接口【brdgoods/goods_list】的响应耗时分析情况 [rd@dfz-nx-01 zxlie]$ sh api-analytics.sh /home/service/nginx/logs/virusdootabe.access.2015112411.log "brdgoods/Goods_list"
|区间(ms)|采样数|总占比|平均耗时(ms)| |:-:|:-:|:-:|:-:| |200+|18733|100%|10500|
#####接口【brdgoods/goods_list】可用性分析情况 [rd@dfz-nx-01 zxlie]$ sh api-analytics.sh /home/service/nginx/logs/virusdootabe.access.2015112411.log "brdgoods/Goods_list" status
|采样总数|失败次数|失败率|可用性|接口| |:-:|:-:|:-:|:-:| |18760|27|0.15%|99.85%|brdgoods/goods_list|
##重构后
goods商品服务层接口日志分析(/goods/)
[rd@dfz-nx-01 zxlie]$ cat /home/service/nginx/logs/goods.mlservice.access.2015120811.log | grep '/goods/' | awk '{ print $6 }' |awk '{ split($0,request,"?"); print request[1]}' | sort | uniq -c | sort -nr
调用数量 | 接口路径 |
---|---|
304612 | /goods/goods_info |
214959 | /goods/campaign_info |
3611 | /goods/query_goods_sph |
1299 | /goods/goods_sale_num_add |
907 | /goods/query_goods |
537 | /goods/goods_sph_update |
466 | /goods/goods_save |
408 | /goods/goods_status_update |
328 | /goods/Goods_sph_update |
157 | /goods/goods_status |
146 | /goods/perhour_new_goods_num_set |
4 | /goods/cargo_info |
#####接口【/goods/query_goods_sph】的响应耗时分析情况 [rd@dfz-nx-01 zxlie]$ sh api-analytics.sh /home/service/nginx/logs/goods.mlservice.access.2015120811.log "/goods/query_goods_sph"
|区间(ms)|采样数|总占比|平均耗时(ms)| |:-:|:-:|:-:|:-:| |0
50|3492|96.7%|25.85| |50100|114|3.15%|59.33| |100~150|5|0.13%|113|
[rd@dfz-nx-01 zxlie]$ sh api-analytics.sh /home/service/nginx/logs/goods.mlservice.access.2015120814.log "/goods/query_goods_sph"
|区间(ms)|采样数|总占比|平均耗时(ms)| |:-:|:-:|:-:|:-:| |0
50|4454|96.32%|25.65|100|158| 3.41%|59.86|
|50
|100150|4|0.08%|118|200|1|0.02%|162|
|150
|200+|7| 0.15%|4583.42|
|18760|27|0.15%|99.85%|brdgoods/goods_list|