在asp.net core api解决方案中,我使用solr进行全文搜索。我想了解如何配置 SolrNet 以使用不同的模型对同一集合进行索引和搜索。
对于我的用例,我仅将模型对象的 id 存储在 solr 中 - 其他字段已索引但未存储。这是因为我使用数据库来检索模型,一旦 solr 告诉我哪些 id 是搜索命中。
在这种情况下,假设我的模型是“文件夹”。我有一个文件夹集合,并在 DI 中注册它以进行 indexing,使用
FolderDto
对象来定义映射。
services.AddSolrNet<FolderDto>($"{solrEndpoint}/folders");
services.AddScoped<IFolderIndex, FolderIndex>();
我在
IFolderIndex
的实现中有索引方法。
我需要在 DI 中做什么来定义一个单独的 SolrNet 连接服务用于搜索,我想用一组
int
id 来响应?
事实证明我只需要在 DI 中提供查询时间模型:
services.AddSolrNet<FolderDto>($"{solrEndpoint}/folders");
services.AddSolrNet<FolderQueryResultDto>($"{solrEndpoint}/folders"); // this bit
services.AddScoped<IFolderIndex, FolderIndex>();
然后我可以实例化一个合适的对象来在我的FolderIndex中进行查询:
public FolderIndex(ISolrOperations<FolderDto> solr, ISolrOperations<FolderQueryResultDto> solrSearcher)
{
_solr = solr;
_solrSearcher = solrSearcher;
}
这使得 SolrNet 知道当我使用它时
solrSearcher
它应该生成对正确端点的查询,并将响应解析为正确的类型。