如果添加大量过滤器查询,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));
通过此更改,它开始工作...
我们在 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));
通过此更改,它开始工作...