添加自定义字段类型时,SolrCloud会占用所有内存

时间:2018-03-02 07:55:46

标签: solr solrcloud

我已构建自定义字段类型以提高搜索相关性,我已使用此配置定义了名为text_bag的新类型:

<fieldType name="text_bag" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
    <analyzer type="index">
        <tokenizer class="solr.ClassicTokenizerFactory" />
        <filter class="solr.ClassicFilterFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false" />
        <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="1" />
        <filter class="solr.FlattenGraphFilterFactory" />
        <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" />
        <filter class="solr.FlattenGraphFilterFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false" />
        <filter class="solr.WordDelimiterGraphFilterFactory" preserveOriginal="0" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.ShingleFilterFactory" tokenSeparator="" maxShingleSize="3" />
    </analyzer>
</fieldType>

顺便说一句,synonyms.txt的大小非常小。

对于schema.xml,我将这些配置添加到我的收藏中:

<field name="keywords_bag" type="text_bag" indexed="true" stored="false" multiValued="true" required="false" />
<copyField source="name" dest="keywords_bag" />
<copyField source="category" dest="keywords_bag" />
<copyField source="location" dest="keywords_bag" />
<copyField source="tags" dest="keywords_bag" />
<copyField source="keywords" dest="keywords_bag" />

所有这些源字段只是一个字符串,平均长度约为100-200个字符,项目数平均每个字段大约10-20个项目。

将这些配置部署到生产工作负载几个小时后,Solr服务器消耗了所有可用内存(5GB),它通常只使用2GB并使用100%CPU时间。

我使用具有云功能的Solr 6.5.0,群集中有3台服务器。

有没有人注意到配置有任何问题?

1 个答案:

答案 0 :(得分:0)

经过多次查询模式测试后,ShingleFilter可以产生大量的术语,导致QueryParser处理这些术语,因此需要大量的内存。

我使用-Xmx1g测试了Solr 6.5.0,6.5.1,7.0.1然后将15个术语传递给此查询分析器,它只需要10个并发请求,它会消耗所有1GB内存,而不会按时响应请求。 / p>

我已在此处发送了一个问题https://issues.apache.org/jira/browse/SOLR-12084