Sitecore 6.6 - 设置 Lucene 索引

Sitecore 6.6 - Setting up a Lucene index

我正在学习如何为 Sitecore 6.6 设置和配置 Lucene 搜索索引。我拼凑了一个基本配置文件,该文件索引了从树中我想要的位置开始的所有类型为 "Article" 模板的项目,并且能够从该索引中提取所有项目并显示结果中的名称.

现在我已准备好自定义该索引。我需要专门索引两个字段,但我在使用配置语法时遇到了问题。这是这两个领域的细分。我希望有人可以帮助我调整配置以说明这些字段。

Meta Keywords - 此字段(单行文本)不是 Article 模板的一部分,而是从 Article 继承的另一个名为 Meta Base 的模板中提取的。我不需要存储它,只需要为搜索建立索引。前任。值 "ortho, pain, joint"

Category - 此字段是指向树中类别项目的可用列表的下拉链接。我确实需要存储它并为其编制索引,以便我可以在结果页面上使用它 searching/displaying 这些 Lucene 文档。

我似乎找不到 6.6 的正确文档。 7+ 的文档存在,但它们在 6.6 中不起作用,因为情况似乎发生了重大变化。 Sitecore 支持将我引导到一些旧文档,其中包含已弃用的代码以及未编译的代码,而我阅读的所有其他内容似乎都指向使用 Contrib Search(我已经通过 NuGet 引入)。我想让它在没有 Contrib 的情况下工作,但如果我需要,我会的。

这是我在没有 contrib 的情况下创建的配置:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<search>
  <configuration>
    <indexes>
      <index id="my-custom-index" type="Sitecore.Search.Index, Sitecore.Kernel">
        <!-- name - not sure if necessary but use id and forget about it -->
        <param desc="name">$(id)</param>

        <!-- folder - name of directory on the hard drive -->
        <param desc="folder">__my-custom-index</param>

        <!-- analyzer - reference to analyzer defined in Sitecore.config -->
        <Analyzer ref="search/analyzer" />

        <!-- list of locations to index - each of the with unique xml tag -->
        <locations hint="list:AddCrawler">

          <!-- first location (and the only one in this case) - specific folder from you question -->
          <!-- type attribute is the crawler type - use default one in this scenario -->
          <specificfolder type="Sitecore.Search.Crawlers.DatabaseCrawler,Sitecore.Kernel">

            <!-- indexing items from web database -->
            <Database>web</Database>

            <!-- your folder path -->
            <Root>/sitecore/content/Northwestern/in-care</Root>

            <!-- Article Template -->
            <include hint="list:IncludeTemplate">
              <ContentHubArticle>{1E79E463-631A-4FBB-BEEA-3304D25F29CD}</ContentHubArticle>
            </include>

            <indexAllFields>true</indexAllFields>
          </specificfolder>
        </locations>



      </index>
    </indexes>
  </configuration>
</search>

Sitecore 6 lucene 索引的最基本设置是:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
 <sitecore>
  <search>
   <configuration>
    <indexes>
     <index id="custom-index" type="Sitecore.Search.Index, Sitecore.Kernel">
      <!-- name of the index displayed in the Sitecore Control Panel -->
      <param desc="name">Custom Index</param>
      <!-- folder in which index file will be stored -->
      <param desc="folder">__$(id)</param>
      <!-- reference to the analyzer defined in Sitecore config -->
      <Analyzer ref="search/analyzer" />
      <!-- list of locations which will be index by our index -->
      <locations hint="list:AddCrawler">
       <!-- our first and only location crawled by standard Sitecore crawler -->
       <custom-loc-1 type="Sitecore.Search.Crawlers.DatabaseCrawler,Sitecore.Kernel">
        <!-- location root is Home item in master database -->
        <Database>master</Database>
        <Root>/sitecore/content/Home</Root>
       </custom-loc-1>
      </locations>  
     </index>
    </indexes>
   </configuration>
  </search>
 </sitecore>
</configuration>

对于自定义字段,您需要创建自定义抓取工具 class,例如:

public class MyCrawler : Sitecore.Search.Crawlers.DatabaseCrawler
{
  protected override void
    AddAllFields(Document document, Item item, bool versionSpecific)
  {
    base.AddAllFields(document, item, versionSpecific);

    document.Add(CreateField("my_title", item["title"], false, 1));

    WorkflowState state = item.State.GetWorkflowState();
    document.Add(CreateField("my_final_state", 
        state != null && state.FinalState ? "1" : "", false, 1));

    document.Add(CreateDataField("data_title", item["title"]));
  }
}

并像这样注册此爬虫 class:

<locations hint="list:AddCrawler">
  <custom-location-1 type="My.Assembly.Namespace.MyCrawler,My.Assembly">
  <Database>master</Database>
  <Root>/sitecore/content/Home</Root>
  </custom-location-1>
</locations>

您可以使用以下博客文章来了解有关 Sitecore 6 搜索的更多信息:

  1. https://www.cognifide.com/blogs/sitecore/troubleshooting-sitecore-lucene-search-and-indexing/
  2. https://www.cognifide.com/blogs/sitecore/sitecore-6-lucene-search-the-most-basic-setup/
  3. https://www.cognifide.com/blogs/sitecore/pagination-sorting-crawling-and-storing-data-with-sitecore-and-lucene/

在与 Sitecore 支持人员交谈时,他们明确表示这无法通过开箱即用的功能来完成。通过使用这一系列博客 posts:

,我能够让它为我的字段编制索引

http://sitecoregadgets.blogspot.com/2009/10/working-with-lucene-search-index-part-i.html http://sitecoregadgets.blogspot.com/2009/11/working-with-lucene-search-index-in.html http://sitecoregadgets.blogspot.com/2009/11/working-with-lucene-search-index-in_25.html http://sitecoregadgets.blogspot.com/2010/08/adding-custom-fields-to-index.html http://sitecoregadgets.blogspot.com/2010/07/sitecore-lucene-index-does-not-remove.html

唯一剩下的就是让 droplink 字段存储一个不同于指向该项目的 guid 的字段,但我认为这里有足够的我可以称之为回答,因为最大的问题是如何索引自定义领域。完成后我可能会回来 post 整个代码,这样您就不必像我一样从博客 post 中拼凑所有内容,但很容易弄清楚是什么进行中。

我也支持上面 Marek 的 post,因为他很有帮助并且他的评论非常有用。