慢查询长查询响应时间
我有一个单核[1],非复制Solr索引包含约4000万文件。每个文件有两个字段,一个存储,另一个不存在。我搜索未存储的字段,存储的字段是我的结果。慢查询长查询响应时间
该索引的响应时间大约为8秒。需要注意的是,我没有做出我认为典型的全文查询。每个查询包含数十个或术语。我预计这会很慢,但速度并不慢。
我注意到的一点是,Solr只使用其JVM所具有的7GB的几百MB。它不能保留记忆中的大部分指标。这导致我的问题:有没有办法配置solr,使其*在内存中维护很多(或至少更多)索引?
[1] Sharding为我引入了一个问题。相对分数在我的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))将在〜100ms内返回。
我相信我已经找到并解决了我遇到的问题。
原来,我的很多文档,由于它们都由书目元数据组成,所以在通常的英语停用词之上包含了一些非常常见的词汇。这些词包括'日记'和'诉讼'。此外,由于我的文档包含作者姓名,通常包括首字母缩写,其中很多都包含索引单字母术语。如果将这些内容中的任何一个作为查询词汇,响应时间将会增加一个数量级。
我的解决办法是简单地使用的StopFilter和LengthFilter筛选出这些常用的术语,比如:
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LengthFilterFactory" min="2" max="100"/>
你将这些添加到查询过滤器的权利? – zengr 2013-06-20 17:34:04
其实对于查询和索引过滤器来说,因为没有要索引的东西永远不会被查询。虽然我猜测只是将上述内容添加到查询过滤器中会产生相同的效果。 (我假设问题在于查询普通的短期条款,而不是针对包含许多类似短期条款的文档的结构或规模或索引的某些其他特征引入的任何问题。) – 2013-06-21 09:29:06
请提供一些更多的信息 - 一个例子查询和哪些字段类型,应用什么标记化(任何)? – kpentchev 2012-08-08 12:05:15
@kpentchev我已经添加了关于模式和示例查询的一些信息。 – 2012-08-08 12:12:33
还应该提一下,我试图把索引放在ramfs上。不幸的是,它将响应时间提高了2秒! – 2012-08-08 12:17:09