代码之家  ›  专栏  ›  技术社区  ›  misteraidan

Sitecore Lucene索引-在父Lucene文档中保存子字段值

  •  0
  • misteraidan  · 技术社区  · 16 年前

    我有一个Sitecore内容结构,其中任何单个项都可以有许多子项,用于存储列表的可枚举内容(显然是一种相当标准的方法)。我希望为这些项目编制索引,但将它们的索引数据存储在Lucene中的父文档中。这将有望加快搜索速度,通过节省时间对多个有效指向同一URL的结果进行排序。下面是我将实现的自定义索引器的一些基本代码。

    有人能告诉我这是(a)可能的还是(b)一个好主意吗?我看到的主要问题是Lucene文档看起来已经被创建了-我需要删除它吗?此外,如果父项的Lucene文档不存在,是否需要创建它?当父项被索引时,它是否会被覆盖/丢失。看起来有点冲突。

    另一个选项是,我不索引子项,而是在索引父项时获取它们的值。现在我想起来了,这似乎是更好的方式。。意见?

    public class CustomIndex : Sitecore.Data.Indexing.Index
    {
        public CustomIndex(string indexName): base(indexName) {}
    
        protected override void AddFields(Item item, Document document)
        {
            //is item a sub-item (promo item)
            if (...)
            {
                //delete the sub-item lucene doc
                DeleteDoc(document); //is this possible or needed?
    
                //get parent item
                Item parentItem = item.Parent;
    
                //get lucene document for parent item
                Document parentDoc = GetParentDoc();
    
                //add fields to parent item lucene document
                parentDoc.Add(...);
                parentDoc.Add(...);
            }
            else
            {
                base.AddFields(item, document);
            }
        }
    }
    
    1 回复  |  直到 13 年前
        1
  •  2
  •   jspcal    16 年前

    是的,我同意,选项2更好——当你在父母身边时,为孩子编制索引。主要是因为您不能保证遍历的顺序,所以文档可能会像您所说的那样被重新创建。