我有一个包含约 4000 万个文档的单核 [1]、非复制 Solr 索引。每个文档有两个字段,一个存储,另一个不存储。我搜索非存储字段,存储字段是我的结果。
该索引的响应时间约为 8 秒。需要注意的是,我没有进行我认为典型的全文查询。每个查询包含几十个 OR 术语。我预计这会很慢,但没有现在那么慢。
我注意到 Solr 只使用了它的 JVM 可用的 7GB 中的几百 MB。它不能将大部分索引保留在内存中。这引出了我的问题:有没有办法配置 solr,使其被迫在 RAM 中维护大部分(或至少更多)索引?
[1] 分片给我带来了一个问题。相对分数在我的 Solr 应用中非常重要。分片本地评分意味着我拥有的分片越多,得分就越不准确。
回复评论的更多信息:
这是我搜索的字段的字段类型定义:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这是一个示例查询:
(Carberry J 2008 Toward a Unified Theory of High-Energy Metaphysics Silly String Theory Journal of Psychoceramics 5 11 1 3)
这将需要大约 10 秒的时间来响应,而具有较少 ORed 术语的查询,例如 (Carberry 2008),将在大约 100 毫秒内返回。