Sitecore - 具有与其他节点相同属性的补丁节点

时间:2014-06-23 09:01:08

标签: search attributes sitecore nodes patch

如果有多个其他节点具有相同的属性,如何修补指定的节点?

我需要在ContentSearch部分修补分析器的捷克语,但所有节点都以

开头

< mapEntry type =" Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry,Sitecore.ContentSearch.LuceneProvider ">

部分配置如下所示

...</maEntry>
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
  <param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
    <param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
      <param hint="name">ar-AE</param>
    </param>
  </param>
  <param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
    <param desc="defaultAnalyzer" type="Lucene.Net.Analysis.AR.ArabicAnalyzer, Lucene.Net.Contrib.Analyzers">
      <param hint="version">Lucene_30</param>
    </param>
  </param>
</mapEntry>
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
  <param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
    <param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
      <param hint="name">pt-BR</param>
    </param>
  </param>
  <param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
    <param desc="defaultAnalyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.Contrib.BrazilianAnalyzer, Sitecore.ContentSearch.LuceneProvider">
      <param hint="version">Lucene_30</param>
    </param>
  </param>
</mapEntry>
<mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
  <param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
    <param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
      <param hint="name">cs-CZ</param>
    </param>
  </param>
  <param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
    <param desc="defaultAnalyzer" type="Lucene.Net.Analysis.Cz.CzechAnalyzer, Lucene.Net.Contrib.Analyzers">
      <param hint="version">Lucene_30</param>
    </param>
  </param>
</mapEntry>
<mapEntry>...

我需要修补(在我们的示例中)第二个节点中的defaultAnalyzer 。但是第二个节点不是现实生活中的第二个节点,但它可能是第三个,第七个节点......我想我需要找到&#34; mapEntry&#34;节点由指定的内部节点组成。

如果我使用这个

<map hint="list:Add">
    <!-- Patch analyzer for Czech language -->
    <mapEntry type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
        <param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
            <param desc="defaultAnalyzer" type="Lucene.Net.Analysis.Cz.CzechAnalyzer, Lucene.Net.Contrib.Analyzers">
                <patch:attribute name="type">MySolution.MetroAsciiFoldingAnalyzer, MySolution</patch:attribute>
            </param>
        </param>
    </mapEntry>
</map>

它将修补第一个节点。

我在这个问题中找到了类似的东西Select node based on child node value in Web.config Transform,但据我所知,我会用我的自定义节点替换整个节点,但是......这是必要的吗?

1 个答案:

答案 0 :(得分:5)

您链接的答案使用SlowCheetah进行转换,我认为您正尝试使用Sitecore config patch进行此操作...

因为您正在根据子值选择节点,所以可以使用contains函数来检查值。但是您只能修补该特定节点,您无法为查询选择它。所以你基本上必须替换整个节点。

我建议您先删除现有的cs-CZ条目,然后添加自己的条目。请注意,我必须使mapEntry节点更加独特,因此我添加了desc属性,否则它会覆盖第一个匹配项(在本例中为ja-JP)

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" >
   <sitecore>
    <contentSearch>
       <indexConfigurations>
         <defaultLuceneIndexConfiguration>
          <analyzer>
            <param desc="map">
              <map>

                <mapEntry patch:instead="*[contains(.,'cs-CZ')]">
                  <patch:delete />                 
                </mapEntry>

                <mapEntry desc="cs-CZ Analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.PerExecutionContextAnalyzerMapEntry, Sitecore.ContentSearch.LuceneProvider">
                  <param hint="executionContext" type="Sitecore.ContentSearch.CultureExecutionContext, Sitecore.ContentSearch">
                    <param hint="cultureInfo" type="System.Globalization.CultureInfo, mscorlib">
                      <param hint="name">cs-CZ</param>
                    </param>
                  </param>
                  <param desc="analyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
                    <param desc="defaultAnalyzer" type="MySolution.MetroAsciiFoldingAnalyzer, MySolution">
                      <param hint="version">Lucene_30</param>
                    </param>
                  </param>
                </mapEntry>

              </map>
            </param>
          </analyzer>     
        </defaultLuceneIndexConfiguration>
      </indexConfigurations>
    </contentSearch>
   </sitecore>
</configuration>