2

我在我们的项目中实现了 Solr.net 搜索,目前索引中有 660k 文档(大小约为 185 Mb)。

不幸的是,solr 不时抛出 OutOfMemory 异常:

搜索联系人时出错 System.OutOfMemoryException:引发了“System.OutOfMemoryException”类型的异常。在 System.Text.StringBuilder.ToString() 在 System.IO.StreamReader.ReadToEnd() 在 SolrNet.Impl.SolrConnection.ReadResponseToString(IHttpWebResponse response) 在 c:\prg\SolrNet\SolrNet\Impl\SolrConnection.cs:line 213在 SolrNet.Impl.SolrConnection.GetResponse(IHttpWebRequest request) 在 c:\prg\SolrNet\SolrNet\Impl\SolrConnection.cs: 第 199 行在 SolrNet.Impl.SolrConnection.Get(String relativeUrl, IEnumerable'1 参数) 在 c: \prg\SolrNet\SolrNet\Impl\SolrConnection.cs:第 149 行在 SolrNet.Impl.SolrQueryExecuter'1.Execute(ISolrQuery q, QueryOptions options) 在 c:\prg\SolrNet\SolrNet\Impl\SolrQueryExecuter.cs:第 672 行在 SolrNet.Impl.SolrBasicServer'1.Query(ISolrQuery 查询,

但是代码很简单:

public ISolrOperations<ContactForSearch> SolrInstance
{
    get
    {
        if (!_initialized)
        {
            Startup.Init<ContactForSearch>(ConfigurationManager.AppSettings.Get("SolrPath"));
            _initialized = true;
        }

        return ServiceLocator.Current.GetInstance<ISolrOperations<ContactForSearch>>();
    }
}

public virtual int SearchCount(string queryString, bool exactSearch)
{
    return SolrInstance.Query(GetGeneralSearchQuery(queryString, exactSearch)).NumFound;
}

有可能有成千上万的联系人要返回一些查询,但我认为NumFound应该只得到计数?那么,我该如何解决这个问题呢?提前感谢所有建议!

4

1 回答 1

3

看起来您正在使用 .NET 客户端。根据我的经验,当您使用 .NET 客户端执行 Solr 查询时,它将从 Solr 返回整个文档,而不仅仅是您感兴趣的查询部分。您可以尝试将查询限制为返回 0 个实际行,因为这应该仍然返回正确的 NumFound 值。

例如:

return SolrInstance.Query(query, new QueryOptions{ Rows = 0 }).NumFound;
于 2016-01-07T23:05:04.743 回答