小编san*_*erd的帖子

Sitecore Lucene:在更新项目时重新索引子项(或父项)

情况

我有以下Sitecore Lucene配置:

  • 新索引,type ="Sitecore.Search.Index,Sitecore.Kernel"
  • 包含两个抓取工具(一个自定义抓取工具,可添加额外的"计算"字段)
  • 每个爬网程序处理其特定模板GUID,因为它们包含不同的计算字段

问题

计算的字段基于父/子字段.如何设置Sitecore中的Lucene,只是在索引中更新了实际更改项目的文档.

因此,不更新其他文档上的计算字段(这些字段是必需的,这些字段上存在搜索条件).

是否有可能手动触发索引中其他项的更新?
我已经研究过继承Sitecore.Search.Index,但没有一个相关的方法是虚拟的.

此外,我尝试订阅IndexingProvider-events:
public event EventHandler OnRemoveItem;
公共事件EventHandler OnRemoveVersion;
公共事件EventHandler OnUpdateItem;

这背后的想法是在DatabaseCrawler中触发需要更新的其他项目的OnUpdateItem事件,但是您无法从IndexingProvider外部触发此事件.

有没有办法在不进行完全重建的情况下触发索引更新,这不涉及保存/重新发布其他项目?

谢谢!
桑德

database lucene indexing sitecore web-crawler

6
推荐指数
1
解决办法
1626
查看次数

AddOrGetExisting不会将过期时间考虑在内

我正在使用(.NET 4.5)MemoryCache,与SlidingExpiration结合使用.

我注意到方法.AddOrGetExisting()似乎没有考虑到期,而.Get()确实如此.

单元测试:

    [TestMethod]
    public void NonWorking()
    {
        var memCache = new MemoryCache("somekey");
        var cachePolicy = new CacheItemPolicy() { SlidingExpiration = TimeSpan.FromSeconds(1) };

        var cacheEntry = memCache.AddOrGetExisting("key1", "foo", cachePolicy);
        Assert.AreEqual(null, cacheEntry); // OK: AddOrGetExisting returns null, because it wasn't existing yet
        Thread.Sleep(1100);

        // Expecting null, since the existing item for key1 has expired by now.
        // It is, however, still "foo".
        Assert.AreEqual(null, memCache.AddOrGetExisting("key1", "bar", cachePolicy));

        // FYI: afterwards, memCache.Get("key1") still equals "foo"
    }

    [TestMethod]
    public void Working()
    {
        var …
Run Code Online (Sandbox Code Playgroud)

.net c# memorycache

5
推荐指数
1
解决办法
1994
查看次数

标签 统计

.net ×1

c# ×1

database ×1

indexing ×1

lucene ×1

memorycache ×1

sitecore ×1

web-crawler ×1