Sitecore 6.6 - 设置Lucene索引

时间:2015-05-19 15:53:43

标签: lucene sitecore sitecore6

我正在研究如何为Sitecore 6.6设置和配置Lucene搜索索引。我将一个基本配置文件拼凑在一起,该文件对所有类型的项目进行索引"文章"模板从我在树中的所需位置开始,并且能够从该索引中提取所有项目并显示结果中的名称。

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

元关键字 - 此字段(单行文本)不是文章模板的一部分,而是从文章继承的另一个名为Meta Base的模板中提取。我不需要存储它,只需将其编入索引进行搜索。恩。价值" ortho,pain,joint"

类别 - 此字段是一个droplink,指向树中可用的类别项列表。我确实需要存储它以及索引它,以便我可以在搜索/显示这些Lucene文档的结果页面上使用它。

我似乎找不到6.6的正确文档。 7岁以上的文档存在,但他们不能在6.6中工作,因为事情似乎发生了重大变化。 Sitecore支持我指向一些旧文档,其中包含已弃用的代码以及无法编译的代码,我读过的其他内容似乎都指向使用Contrib Search(我已经通过NuGet已经)。我想在没有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>

2 个答案:

答案 0 :(得分:4)

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>

对于自定义字段,您需要创建自定义搜寻器类,例如:

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"]));
  }
}

并注册此抓取工具类:

<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/

答案 1 :(得分:0)

与Sitecore支持人员交谈时,他们肯定表示这不能通过开箱即用的功能完成。我能够通过使用这一系列博客文章来索引我的字段:

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不同的字段,但我认为这里有足够的内容我可以称之为答案,因为最大的问题是如何索引自定义字段。我完成后可能会回来发布整个代码,所以你不必像我一样把博客文章中的所有内容拼凑起来,但很容易弄清楚它的内容是什么上。

由于他的帮助非常有用,我也赞成马立克的帖子,而且他的评论非常有用。