使用SolrNet初始化多个Solr字典索引
本文关键字:Solr 字典 索引 SolrNet 初始化 使用 | 更新日期: 2023-09-27 17:50:34
我目前正在使用Solrnet实现搜索。我的索引非常大,因为我们是一家全球性公司,它们是经过翻译的。我最初的想法是在一个索引中包含所有翻译的多个记录,但这最终成为一个问题,因为索引对于一个索引来说太大了,所以我们按语言划分了索引。例如,我创建了一个名为SearchEnglish的英语索引和一个名为SearchFrench的法语索引。
要启动Solrnet,我使用如下命令:
Startup.Init<Dictionary<string, object>>(SearchIndexUrl);
我使用字典是因为我的Solr索引包含动态facet。问题是,我的代码库将需要初始化所有索引。所以我无法区分一个指标和另一个指标。对于使用Solrnet处理多个字典Solr索引的初始化,您有什么建议?我在文档中没有看到任何关于这方面的内容。
谢谢,保罗
我已经知道如何通过使用SolrNet/Windsor来初始化我的Solr实例来做到这一点。我没有找到关于如何做到这一点的大量文档,所以我想分享一下。
这是我的一些代码。
在Global.asax.cs中,我有以下
public static WindsorContainer _WindsorContainer { get; set; }
protected void Application_Start()
{
InitiateSolr();
}
protected void Application_End()
{
_WindsorContainer.Dispose();
}
/// <summary>
/// Initialized Misc Solr Indexes
/// </summary>
protected void InitiateSolr() {
var reader = ApplicationConfig.GetResourceReader("~/Settings/AppSettings.resx");
InitiateSolrFacetedIndex(reader);
}
/// <summary>
/// Initializes The Faceted Search Indexes
/// </summary>
protected void InitiateSolrFacetedIndex(ResourceReader reader) {
Data d = new Data();
_WindsorContainer = new WindsorContainer();
var solrFacility = new SolrNetFacility(reader.ResourceCollection["Url.SolrIndexPath"] + "EN");
foreach (var item in d.GetLanguages())
{
solrFacility.AddCore("ProductSpecIndex" + item.LanguageCode.ToString(), typeof(Dictionary<string, object>), reader.ResourceCollection["Url.SolrIndexPath"] + item.LanguageCode.ToString());
}
_WindsorContainer.AddFacility("solr", solrFacility);
Models.Solr.SolrWindsorContainer c = new Models.Solr.SolrWindsorContainer();
c.SetContainer(_WindsorContainer);
}
我还创建了一个扩展静态类来保存WindsorContainer对象。
public class SolrWindsorContainer
{
public static WindsorContainer Container { get; set; }
public void SetContainer(WindsorContainer container){
Container = container;
}
public WindsorContainer GetContainer(){
return Container;
}
}
然后在我的应用程序中,我调用这个静态对象来获取温莎容器
Models.Solr.SolrWindsorContainer c = new Models.Solr.SolrWindsorContainer();
ISolrOperations<Dictionary<string, object>> solr = container.Resolve<ISolrOperations<Dictionary<string, object>>>("ProductSpecIndex" + languageCode);
var results = solr.Query("*:*");
如果您对此有任何疑问,您可以在下面的链接中阅读关于solrnet和Windsor初始化的信息。
https://github.com/mausch/SolrNet/blob/master/Documentation/Initialization.md https://github.com/mausch/SolrNet/blob/master/Documentation/Multi-core-instance.md