如何让Lucene.NET将2个Sitecore字段组合到1个索引字段中?

时间:2013-12-17 21:29:53

标签: sitecore lucene.net sitecore6

我正在使用Lucene.NET和Sitecore进行搜索。我创建了一个自定义Lucene索引。通常,它是Sitecore字段和Lucene索引字段之间的一对一映射。我希望能够获取2个字段并将它们组合在Lucene索引中。下面是我的自定义索引定义的示例。您将看到一个名为Activity的字段和一个名为Board的字段。接下来是我想要做的一个例子 - 将Activity和Board结合到索引中的一个字段中。我只是不确定这是否可行,如果是这样,那么定义像这样的组合字段的语法是什么。有什么想法吗?

        <index id="reportsIndex" singleInstance="true" type="IOM.library.CustomIndexer, IOM">
            <param desc="name">$(id)</param>
            <template hint="list:AddTemplate">
                <template>{79EBE484-BAD6-4173-B80A-29AC7D734565}</template>
            </template>
            <fields hint="raw:AddField">
                <field target="Title">Title</field>
                <field target="SortTitle" storage="keyword">Title</field>
                <field target="ShortDescription">ShortDescription</field>
                <field target="FullDescription">FullDescription</field>
                <field target="Topic">Topic</field>
                <field target="Type">Type</field>
                <field target="ReleaseDate">ReleaseDate</field>
                <field target="Series">Series</field>
                <field target="Activity">Activity</field>
                <field target="Board">Board</field>
                <field target="MyCombinedField">??Activity, Board??</field>
            </fields>
        </index>

更新:我尝试按照人们的建议进行操作,并将2个不同的Sitecore字段映射到同一个Lucene字段。然而,这似乎不起作用。我尝试了以下方法:

<index id="reportsIndex" singleInstance="true" type="IOM.library.CustomIndexer, IOM">
  <param desc="name">$(id)</param>
  <template hint="list:AddTemplate">
    <template>{79EBE484-BAD6-4173-B80A-29AC7D734565}</template>
  </template>
  <fields hint="raw:AddField">
    <field target="Title">Title</field>
    <field target="Activity">Activity</field>
    <field target="Board">Board</field>
    <field target="MyCombinedField">Activity</field>
    <field target="MyCombinedField">Board</field>
  </fields>
</index>

当我查看IndexViewer时,这就是我所看到的。如果内容项具有“活动”字段的内容,则将在“MyCombinedField”中填充(因为它是第一个)。如果“活动”字段没有内容,则Lucene将使用Board内容填充“MyCombinedField”。但它永远不会将两个字段的内容都放入MyCombinedField字段中。我做错了吗?

1 个答案:

答案 0 :(得分:4)

您必须使用旧数据索引。你在Sitecore 6.5之前运行吗?您可以考虑重写代码以使用Sitecore.Search。

无论如何,你可以通过类似的东西索引同一个Lucene字段中的多个Sitecore字段:

<index id="system" singleInstance="true" type="Sitecore.Data.Indexing.Index, Sitecore.Kernel">
        <param desc="name">$(id)</param>
        <fields hint="raw:AddField">
          <field target="name">@name</field>
          <field target="name">__created</field>
          <field target="name">@tid</field>

在这种情况下,项目的名称,创建的日期字段和模板ID都在同一字段中编入索引。

简而言之:只需创建具有相同目标属性的多个字段元素