Muenchian分组困难

时间:2014-01-25 23:37:39

标签: sharepoint muenchian-grouping fastsearch

我正在构建一个Sharepoint搜索结果页面,以查找第三方工具中提出的问题的答案。  我有一个与他们的sql db的bdc连接。  我正在爬行db中的一个表。  我需要使用muenchian方法将问题和答案结果组合在一起,使用同一个表中的多个列。  我不能改变数据库所以我必须将结果拉到一起搜索才能有意义。  此表包含所提问题的所有条目和给出的答案。  我必须使用搜索作为呈现Q& A

的应用程序将它们绑在一起

数据概述:  核心搜索结果中返回的每条记录都有:  标题 - 这是问题或答案 activityid(int) - 条目的唯一ID  activitytypeid(int) - 这些标识它是Q还是A / 79或82  parentid(int) - 此值包含原始问题的activityid - 如果记录是原始问题,则此列的值为0  isanswer(boolean)是或否(这有点多余,与activitytypeid相同,但我不确定是否可以使用它来帮助分组)

评分  activitype id是:  79 - 被问到的问题 - 这将是0的parentid  要么  82 - 回答问题 - 这将具有与原始问题的活动ID匹配的父ID

我正在尝试但没有太大成功将我的搜索结果分组/排序以首先返回问题。在下面的示例中,它将是activityid 19142,并且问题的答案在下面缩进,所有组合在一个集合中

在审查我的黑客或示例时的任何帮助都会很棒。

我只是想了解xsl,这是一个很大的学习曲线。我还有很长的路要走,而且肯定已经深入到此深处。

我目前得到的原始xml结果没有格式化结果

    <All_Results>
      <Result>
        <id>1</id>
        <title>Original Question</title>
        <isanswer></isanswer>
        <parentid>0</parentid>
        <activitytype>79</activitytype>
        <activityid>19142</activityid>
      </Result>
      <Result>
       <id>2</id>
       <title>Answer to original question</title>
       <isanswer>true</isanswer>
       <parentid>19142</parentid>
       <activitytype>82</activitytype>
       <activityid>19146</activityid>
     </Result>
     <Result>
       <id>3</id>
       <title>Another Question</title>
       <isanswer></isanswer>
       <parentid>0</parentid>
       <activitytype>79</activitytype>
       <activityid>19200</activityid>
     <Result>
     <Result>
       <id>4</id>
       <title>Second answer to original question</title>
       <isanswer>true</isanswer>
       <parentid>19142</parentid>
       <activitytype>82</activitytype>
       <activityid>19199</activityid>
     </Result>
     <Result>
       <id>5</id>
       <title>and another Question</title>
       <isanswer></isanswer>
       <parentid>0</parentid>
       <activitytype>79</activitytype>
       <activityid>19254</activityid>
     <Result>
     <Result>
       <id>6</id>
       <title>Answer to another question</title>
       <isanswer>true</isanswer>
       <parentid>19200</parentid>
       <activitytype>82</activitytype>
       <activityid>19265</activityid>
     </Result>
    </All_Results>

我正在寻找的输出将所有答案与相应的问题分组,这是非常简化的,但我认为这也是我想要得到的。

    <All_Results>
     <Result>
       <title>Original Question</title>
       <title>Answer to original question</title>
       <title>Second answer to original question</title>
     </Result>
     <Result>
       <title>Another Question</title>
       <title>Answer to another question</title>
     </Result>
    </All_Results>

我对模板的尝试

    <xsl:template match="All_Results">
     <xsl:for-each select="Result[count(. | key('QAsked', 'activityid')[1]) > 0]">
        <xsl:sort select="questionasked" />
        <xsl:value-of select="title" /><br />
        <xsl:value-of select="questionasked" /><br />
        <xsl:value-of select="activityid" /><br /><br />    
        <xsl:for-each select="key('QAsked', '82')">
            <xsl:sort select="questionasked" />
            <xsl:if test="normalize-space(questionasked) = '82'"></xsl:if><br />
            <xsl:value-of select="questionasked" /><br />
            <xsl:value-of select="originalquestion" /><br />
            <xsl:value-of select="likes" /><br /><br />
       </xsl:for-each>
     </xsl:for-each>
    </xsl:template>  

1 个答案:

答案 0 :(得分:0)

试试这个模板:

    <xsl:key name="QAsked" match="Result[(activitytype = '82') or (activitytype = '79')]" use="concat(substring(parentid, 1, number(not(parentid = '0')) * string-length(parentid)),substring(activityid, 1, number(parentid = '0') * string-length(activityid)))"/>
  <xsl:template match="All_Results">
    <All_Results>
      <xsl:for-each select="Result[count(. | key('QAsked', concat(substring(parentid, 1, number(not(parentid = '0')) * string-length(parentid)),substring(activityid, 1, number(parentid = '0') * string-length(activityid))))[1]) = 1]">
        <xsl:sort select="id" />

        <Result>
          <xsl:for-each select="key('QAsked', concat(substring(parentid, 1,  number(not(parentid = '0')) * string-length(parentid)),substring(activityid, 1,  number(parentid = '0') * string-length(activityid))))">
            <xsl:sort select="parentid" />
            <title>
              <xsl:value-of select="title" />
            </title>
          </xsl:for-each>
        </Result>
      </xsl:for-each>
    </All_Results>
  </xsl:template>

输出是xml结构,您提供了该结构作为所需结果的示例。