美文网首页
Solr的Facet优化

Solr的Facet优化

作者: waynedeng | 来源:发表于2017-01-13 11:29 被阅读253次

这两周一直奋斗在一个有4亿条(200G)数据的项目当中,需求是需要快速的对数据进行检索和Facet/Group。

搭建了3台Solr服务器(4核8G)做Cloud,分了3个Shard,2个Replication,按道理性能应该不会差,实际跑下来,普通的检索完全没有问题,但是一旦做facet,Solr就要么报java.lang.OutOfMemoryError: Java heap space的错误,要么就是直接进程死掉!

本来想做facet,如果返回的结果数量很大,那么做facet速度慢是正常的,要统计里面出现的唯一数据,要做大量的循环,也消耗内存,但实际上返回结果数量只有十几条,也会报OutOfMemoryError,实在是诡异。

于是求助google,用OutOfMemoryError去搜,没有实质性的结果,通过搜索“solr facet优化”,发现了这样的说明:

当Sorting, faceting时, 通过设置DocValues来保存记录域值的方式是非常高效的。
Solr通过倒排建立索引, 首先建立term list, 然后每个term对应一个document list。 这样

因为传统的Solr建立Index是通过倒排索引建立的Index, 首先建立term list, 然后每个term对应一个document list, 这样的结构使得查询能够非常快速, 因为terms在内存中有已经准备好的term-to-documentList.

对于其它的我们的搜索, 如sorting, faceting, 和highlighting, 倒排索引并不是非常有效。 比如对faceting来讲, 必须先得到在每一个document中的term组装成结果集, 再得到document IDs. 这些所有操作都是在内存中, 当数据量大的时候 , 会使速度减慢, 并且会占用宝贵的内存资源。

在Lucene4.0以后,DocValue 以面向列的存储方式被引用。这是以document-to-value mapping 的方式在index时被创建。 减轻了fieldCache的内存需求, 使faceting, sorting, grouping更加快速。

使用DocValues很简单,修改schema.xml即可。但是有一个限制,text字段是无法设置DocValues属性的。

如果这周末能把4亿条数据导完,检验一下结果吧!

相关文章

  • Solr的Facet优化

    这两周一直奋斗在一个有4亿条(200G)数据的项目当中,需求是需要快速的对数据进行检索和Facet/Group。 ...

  • sunspot-solr中的数量统计: facet

    在使用solr过后,各种搜索都会变快很多,而solr却不怎么支持统计功能,只找到一个数量的统计,facet,简单的...

  • solr分组查询

    facet搜索 group搜索 solr的group搜索 按组查询的字段不能是int类型,必须是string类型,...

  • Solr分组查询

    facet搜索 group搜索 solr的group搜索 按组查询的字段不能是int类型,必须是string类型,...

  • Solr高级搜索一_Facet

    这里先偷个懒,参考一下别人的说明,个人还没有过尝试https://blog.csdn.net/liuweitoo/...

  • solr facet java分组统计

    跟你们一样,网上找了一大堆,结果要么报错要么死循环不知所以,于是放弃了,自己写一手 clCategoryOne和s...

  • 微服务架构Day37-Dubbo之全文搜索

    Solr Solr是一个可扩展的,可部署,搜索,存储引擎,优化搜索大量以文本为中心的数据库Solr是开源搜索平台,...

  • solr异常优化

  • 《Solr in action》笔记与总结:一

    之前没做过搜索引擎相关的业务,最近口袋的文献和指南搜索需要进行调整优化,遂入坑solr,出乎意料的是solr的相关...

  • ggplot2多图Panel 组合【facet_wrap() a

    ggplot2多图Panel 组合【facet_wrap() and facet_grid()】 今天就说下ggp...

网友评论

      本文标题:Solr的Facet优化

      本文链接:https://www.haomeiwen.com/subject/qqtsbttx.html