Solr,Lucene 优化

2019-03-27 01:00|来源: 网路

1. 从schema入手:
1> 你的数据是都需要store的么, 比如一些字段只需要提供结果搜索而不作为结果返回, 那么需要将store设置为false从而减少数据量。
2> 你的所有字段都需要highlight么, 如果不需要highlight则可以将term vector关掉。 
3> 确认你在schema没保存太多无用的信息(即不用来搜索也不用来返回)。
4> 你的分词算法是否合理, 如果你使用的是ngram的分词方法, 可以通过设置最大和最小分词长度来限制分词数据。
5> 你的业务上是否有明显的条目信息, 比如你索引的东西是一本书, 很多其他的信息在mysql或者其他地方有副本, 这样的话, 你大可以只store id信息, 其他字段都不store。
6> 你的业务能不能拆分, 比如之前书影音一起做搜索, 你可以考虑将他们分开。

2. 从segment角度
1> lucence使用segment来保存索引数据, 可以在Solr中通过mergeFactor来指定需要的临时文件数目, 如果mergeFactor过大, 则index的时间会缩短, 但磁盘占用和搜索时间会变的很长, 可以考虑适当调整mergeFactor, 或者在slave上做定期的optimize操作, optimize会将segment合并到一起, 当然, 这个过程比较耗资源, 所以可以考虑optimize的时候指定要merge到的数据。
2> 同样, 在master , slave环境中, 最好不要在master上做optimize, 因为在master上做optimize会导致slave每次复制整个index的数据, 这当然不是你想要的, 所以要采取措施不要让master和slave的配置一样, 这样很不划算。

3. 从shard上
更一般的情况是, 如果这些都不是你想要的, 可以考虑shard, Solr支持很灵活的Shard, 你可以在build index的时候给出规则让不同的数据发送到不同的服务器, 比如同过hash等。 这样你的大数据就可以分布在多个机器中, 提高处理速度, 当然, 如果你有性能较好的机器, 同样可以考虑在单一机器上做shard, 利用多核的处理性能。但是要谨慎Solr的一些特性在Shard环境中的支持情况。

4.  JDK 
1> JDK 的版本, 建议使用最新的版本, 但是7貌似有bug, 看有没有7.1, 32 vs 64 对java没影响, 都是byte code ,不区分。
2> 可以通过制定Xmx Xms 参数调整heap 的大小, 如果你经常出现heap over flow的话。
3> 启用多线程gc, 这是你在处理大数据时避免溢出的好方法, 一般一个core一个gc线程。

5. 设置适当的cache, 根据cache命中率的不同来选择fastlru or lru。
这里网上有个叫做chenlb的人以前在1.4中做了一个patch, 可以使用memcache做solr的cache, 不过现在的3.5版本不兼容, 作者也没有对其更新, 如果你在分布式环境下, 可以考虑自己做一下这个, 弄好了可以分享给笔者。

6.  根据使用的不同, 优化方式也非常的多, 不再赘述。


转自:http://www.cnblogs.com/yuankai3399/archive/2013/01/10/2854206

相关问答

更多
  • 你也可以检查下面: - SolrPerformanceFactors ImproveSearchingSpeed ImproveIndexingSpeed SolrCaching 在-七致命-罪-OF-的Solr You can also check below :- SolrPerformanceFactors ImproveSearchingSpeed ImproveIndexingSpeed SolrCaching the-seven-deadly-sins-of-solr
  • @darkheir:Lucene和Solr是两个不同的Apache项目,一起工作,我不明白每个项目的目的是什么。 1)Solr在底漆下使用Lucene。 Lucene没有关于Solr API的线索。 2)Lucene是一个功能强大的搜索引擎框架,可以让我们为我们的应用程序添加搜索功能。 它暴露了一个易于使用的API,同时隐藏所有与搜索相关的复杂操作。 任何应用程序都可以使用这个库,而不仅仅是Solr。 3)Solr是围绕Lucene建造的。 Lucene不仅仅是一个http包装,而且已经知道可以向Lucen ...
  • IndexReader.isOptimized IndexReader.isOptimized
  • 如果ID已存在,即使所有字段都相同,它也会覆盖所有内容。 该ID的版本更改。 If the ID already exists, it overwrites everything even if all the fields are identical. The version changes for that ID.
  • Lucene是一个用Java构建的搜索库,而Solr和Elastic Search(ES)是使用Lucene的Web应用程序。 在大多数情况下,您更喜欢Solr或ES到Lucene,主要是因为开箱即用的机制:多个节点上的分布式搜索,复制,分片和索引管理。 因为使用自定义Java应用程序和Lucene很难实现和维护这样的机制。 你会选择Lucene: 要有更多的控制权,因为它只是一个没有严格依赖关系的jar; 你不希望被任何特定的服务器约束; 您不希望构建自动化以在生产中部署Solr或ES(使用他们的服务器, ...
  • Lucene使用Vector空间模型的概念来计算文档的分数。 总之,查询和文档可以看作是矢量。 为了计算特定查询的文档分数,Lucene计算每个文档向量与查询向量的距离。 VSM查询附近的文档越多,分数越高。 你可以通过查看Lucene的Similarity类和Lucene的Scoring文档来获得更多的细节。 Lucene uses concepts from the Vector space model to compute the score of documents. In summary, que ...
  • 给定完全相同的索引,结果对于确定性查询应该是相同的(记住查询可以取决于一天中的时间等)。 否则分页等会表现得很奇怪。 但这假设所有因素都完全相同 - 相同的索引,相同的Solr版本,相同的底层JVM(我确信这里也存在差异)。 Given the exact same index, the results should be identical for deterministic queries (remember that queries can be dependent on the time of da ...
  • 由于Solr&Lucene是同一项目的一部分。 它建议你使用相同的Solr和Lucene 3.5版本。 在Lucene版本之间必须更改索引格式,如果是这样,索引肯定会不兼容。 但是当您使用Lucene构建索引并通过Solr公开它时,您可以在solrconfig.xml中相应地检查luceneMatchVersion参数,看它是否有效。 LUCENE_30 As the Solr & Lucene are part of th ...
  • 我们可以定制嵌入在Solr中的Lucene吗? 是的,你可以 。 但请记住这一点: Lucene和Solr提交者是全文搜索领域的一些最重要的专家。 他们在这个领域有多年的经验。 如果你认为你可以比他们做得更好,那么继续改变Solr以满足你的需求(它是Apache许可的,所以没有任何商业限制),如果你这样做,试着这样做,以便你以后可以贡献它回到项目,这样每个人都可以受益,项目也会向前发展。 对于绝大多数Solr用户而言,库存产品绰绰有余并满足所有需求。 换句话说,在进入更改代码之前,在邮件列表(stackov ...
  • 我找到了答案。 如果您想按时间排序,而不是相关性,请对所有过滤器使用fq =而不是q =。 这样,Solr不会浪费时间来计算匹配q =的文档的加权值。 事实证明,Solr花费了太多时间来加权,而不是排序。 此外,您可以通过在solrconfig.xml中预热newSearcher和firstSearcher事件侦听器中的排序字段来加快排序速度。 这将确保通过缓存完成排序。 I found the answer. If you want to sort by time, and not relevance, ...