如果添加大量过滤器查询,solrnet 会崩溃

solrnet crashes if you add a lot of filter queries

我们在 ASP.NET 核心后端使用 solrnet。在 startup.cs 中,它被初始化为:

public void ConfigureServices(IServiceCollection services)
{
     services.AddSolrNet<SolrPunt>(solrEndpointAddressForPunt, setup =>
     {
           setup.HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentialsBase64);                
     });  
}

搜索代码本身非常简单。我们注入一个 ISolrOperations<solrEndpointAddressForPunt> 的实例,并相应地使用它:

var queryOptions = new QueryOptions
{
    FilterQueries = new List<ISolrQuery>()
};

// FilterQueries are added 

var solrResponse = await solrOperationsVoorPunten.QueryAsync("*:*", queryOptions);

这一切都很好,我们收到了正确的结果。

但是,如果我们添加很多过滤查询,比如超过105个,就会抛出异常:

Data at the root level is invalid. Line 1, position 1

我想知道这是为什么以及如何解决这个问题。

它与 XML/JSON 设置无关,因为它与少量过滤器查询完美配合。

我认为这与 GET 请求的限制有关。但是后来我读到它通常应该自动切换到 POST 吗?我可以告诉 solrnet 总是使用 POST 吗?如果是这样,如何在 ASP.NET 核心中做到这一点?

或者是否有其他限制导致了这种情况?

感谢任何建议!

我想我找到了。而不是在 for 循环中连接字段:

solrQueryByField = solrQueryByField || new SolrQueryByField(filterVeld, filterValue);

...我只是使用 SolrQueryInList:

queryOptions.FilterQueries.Add(new SolrQueryInList(filterVeld, filterValues));

通过此更改,它开始工作...