使用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初始化多个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