我目前正在使用Solrnet实施搜索。我的索引非常大,而且因为我们是一家全球性公司,所以他们会被翻译。我最初的想法是在一个索引中有多个记录包含所有翻译,但是这最终成为一个问题,因为索引对于一个索引变得很大,所以我们按语言分割索引。例如,我创建了一个名为SearchEnglish的英文索引和一个名为SearchFrench的法语索引。
要启动Solrnet,我使用类似的东西:
Startup.Init<Dictionary<string, object>>(SearchIndexUrl);
我使用字典,因为我的Solr索引包含动态方面。问题是我的代码库需要启动所有索引。所以我无法将一个索引与另一个索引区分开来。您建议使用Solrnet处理多个字典Solr索引的启动?我在文档中没有看到任何相关内容。
谢谢, 保罗
答案 0 :(得分:2)
我已经通过使用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;
}
}
然后在我的应用程序中,我只是调用该静态对象来获取我的Windsor容器
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