[lucene] 讨论:如何提高搜索性能?
kinghongen
2009-08-05
Lucene How To ImproveSearchingSpeed
英文网址:http://wiki.apache.org/lucene-java/ImproveSearchingSpeed 翻译后网址:http://hi.baidu.com/expertsearch/blog/item/2195a237bfe83d360a55a9fd.html 常见的搜索都是无权限的搜索,最近要做一个含权限的搜索,搜索速度问题困扰了很久。 索引格式如下: 数据1: Title:关于中国人民银行国庆放假的通知 UserId:zhangsan|lisi|wangwu 其他域 数据2: Title:关于中国人民银行春节放假的通知 UserId:zhaoliu|qianqi 其他域 如有1个10万数据的索引库,无权限搜索其中一个域 包含“中国人民银行”的数据有3万条,无权限搜索可以cache中存放得分最高的500条,用以下次搜索的时候提高性能。 但是当有权限的搜索时: 假设系统有1000用户,平均每个用户能搜索到30条数据 zhangsan搜索“中国人民银行”能搜索到600条数据,如果cache300条,就会造成 1000用户*300(小于等于300) = 300000(小于等于30万) 跟无权限的搜索的差异太大了,大家有好的方法吗?现在的做法是没放cache,欢迎指教。 |
|
amigobot
2009-08-08
cache某个用户特殊的搜索结果基本没有多大意义。
建议还是用不加权限的cache, 然后对cache的内容做过滤。 当然, 你需要加大cache的量, 同时cache miss的情况有可能是cache的不够多, 而不是完全miss. |
|
kinghongen
2009-08-09
O,我再想想其他可优化的地方吧。
目前是单用户10万数据的搜索1.5秒 30到50并发的情况惨不忍睹,通过日志发现,性能瓶颈在调用lucene API搜素上 search(Query query, HitCollector results) 单用户这个方法1秒左右,30并发就到了50秒,哎难道是PC server的硬盘IO性能不好,单核处理器造成? |
|
luckaway
2009-08-13
引用 目前是单用户10万数据的搜索1.5秒 10万数据搜索结果还是总数据? 针对每个用户缓存一点意义都没有, 你目前应该就只有两种角色:有权限和无权限,那就分开缓存各自的cache容器。 或者在key前面加个标示前缀:youquanxian_、 wuquanxian_ |
|
kinghongen
2009-08-13
是总数据10万条,由于搜索关键字解析后有点复杂(多域搜索),权限用的filter
|
|
kinghongen
2009-08-13
这是压力测试的要的标准,实际使用估计索引在50G左右
|
|
luckaway
2009-08-14
kinghongen 写道 是总数据10万条,由于搜索关键字解析后有点复杂(多域搜索),权限用的filter 不太明白你的权限的业务具体是怎么样子的!!! 就算不用缓存也不会这么慢的~~~ 我现在做的搜索引擎,索引数据是20G,分布式的,2台机器并行运算的-- 一个WEB服务调用多个RMI服务。 压力测试时放在一台机器(双核,3个G)上测试的,40G数据,50个并发的响应时间在2~10s之间,没加cache的。 域不是很多,就标题和正文 自己总结的,可以参考一下: http://luckaway.iteye.com/admin/blogs/402476 |