Sitecore-如何以编程方式将项目添加到自定义索引

时间:2019-05-26 18:30:16

标签: solr sitecore

我已使用FlatDataCrawler在Sitecore中创建了自定义索引。 现在,我要将新项(继承自AbstractIndexable)添加到索引中。

private void Test() {
    var newItem = new ContactIndexable {
        Number = new System.Random().Next(500, 10000),
        MyField = "Item from IMPORTER"
    };
    var index = ContentSearchManager.GetIndex("my_index");
    using (var ctx = index.CreateUpdateContext()) {
        //This line doesn't work:
        ctx.Index.Operations.Add(newItem, index.CreateUpdateContext(), index.Configuration);
        index.Refresh(newItem);
    }

}

调用此代码会导致在我的自定义搜寻器中仅调用GetItemsToIndex方法,但不会将元素添加到索引中。

那么,如何从代码向自定义索引添加新项目?

此方法正常工作,并且向索引添加了新元素:

protected override IEnumerable<ContactIndexable> GetItemsToIndex() {
    List<ContactIndexable> items = new List<ContactIndexable>() {
        new ContactIndexable()
        {
             MyField = "Created in crawler"
        }
    };
    return items;
}

1 个答案:

答案 0 :(得分:1)

您真的很亲近。您必须先将上下文排队,然后再添加并提交。

using (var solr = ContentSearchManager.GetIndex("my_index'))
{
    var ctx = solr.CreateUpdateContext();
    solr.Operations.Add(newItem, ctx, solr.Configuration);
    ctx.Commit();
}

由于这是在后台使用SolrNet,因此必须执行针对Solr的所有操作。