Solr将整个索引加载到内存中

5

我正在使用Solr处理类似于名字:年龄:性别:余额:下一个余额:利息的数据。

我有3000万条记录,总计4G。我只检索了年龄为23岁的50条记录。在schema xml中,我设置了indexed="true"。但是Solr似乎将整个磁盘上的索引加载到内存中(4G)。它不应该只将40多条记录检索到内存中吗?


<documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/> 当我尝试使用age:23进行搜索时,出现了OutOfMemory错误。它会将整个索引加载到内存中。 - Hari
3个回答

5
也许这是文档缓存。您需要指定其大小。请检查solrconfig.xml中的以下内容:
<!-- documentCache caches Lucene Document objects (the stored fields for each document).
  -->
<documentCache
  class="solr.LRUCache"
  size="16384"
  initialSize="16384"/>

4
我认为这取决于你如何配置缓存(它在内存中存储和不存储什么)。将整个索引加载到内存中可以极大地提高检索结果所需的时间,无论查询如何。
有关配置缓存的详细信息以及性能因素的详细信息,请参考以下链接:https://cwiki.apache.org/confluence/display/SOLR/SolrPerformanceFactors

1

存储但未索引的字段保存在磁盘上而非内存中。然而,所有记录都被100%地索引在内存中,这些索引包含了所有已索引的字段。但是倒排索引对此相当有效。

然而,当您进行查询时,SOLR会将与匹配记录相关的所有存储(但未索引)字段内容检索到内存中。这通常被认为是可取的缓存行为,因为它意味着搜索结果可以更快地传输,从而减少了整体查询响应时间。像往常一样,在SOLR中,您可以通过多种方式配置缓存行为以匹配您的内存预算和数据库需求。请查看solrconfig.xml中的可能性。

请注意,这是一个复杂的领域,如果您的主要信息来源是Google,则可能会发现很难完全理解缓存。这是一个最好从SOLR书籍中学习的领域。


有哪本书可以学习关于SOLR的性能调优? - Itay Moav -Malimovka
任何书籍都比没有书籍好。SOLR非常容易设置,以至于许多人不花时间进行研究和学习如何使用它提供的所有按钮和旋钮。因此,如果您阅读任何一本书并应用所学知识,您将领先于那些过于依赖默认设置和博客圈中的几个配方的人群。 - Michael Dillon
我之前确实听从了你的建议。我现在已经完成了SOLR食谱,但现在我正在寻找更具教育性的东西(我喜欢食谱,但它们更适合以后)。我的经验表明,同行的推荐比没有要好。 - Itay Moav -Malimovka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接