如何以编程方式将项目添加到 Sitecore 中的自定义索引?
How to add an item to a custom index in Sitecore programmatically?
我使用 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;
}
你真的很接近。必须先把context排队,然后再add和commit。
using (var solr = ContentSearchManager.GetIndex("my_index'))
{
var ctx = solr.CreateUpdateContext();
solr.Operations.Add(newItem, ctx, solr.Configuration);
ctx.Commit();
}
由于这是在后台使用 SolrNet,因此必须提交针对 Solr 的所有操作。
我使用 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;
}
你真的很接近。必须先把context排队,然后再add和commit。
using (var solr = ContentSearchManager.GetIndex("my_index'))
{
var ctx = solr.CreateUpdateContext();
solr.Operations.Add(newItem, ctx, solr.Configuration);
ctx.Commit();
}
由于这是在后台使用 SolrNet,因此必须提交针对 Solr 的所有操作。