當我們配置好MOSS搜索好,但它默認的搜索鏈接是該文檔本身的連接,而非我們想要的鏈接,有時候我們想要的是它的別一個欄來當鏈接,有時候我們也想顯示別的欄給用戶看,可以通過修改搜索結果中返回的屬性來達到目的。
1. 首先要了解MOSS搜索返回的是什麼
MOSS搜索結果返回的是xml數據集, 那它返回的XML數據格式是怎樣的哪,如下:
代碼
<All_Results>
<Result>
<id>1</id>
<workid>56859</workid>
<rank>851</rank>
<title>區信息辦整合政務基礎數據,推進信息資源共享</title>
<author>系統帳戶</author>
<size>5836</size>
<url>http://172.25.0.185:7001/BMYW/XXB/2009/6339694771417558327245.Html</url>
<urlEncoded>http%3A%2F%2F172%2E25%2E0%2E185%3A7001%2FBMYW%2FXXB%2F2009%2F6339694771417558327245%2EHtml</urlEncoded>
<description></description>
<write>2009/5/21</write>
<sitename>http://172.25.0.185:7001</sitename>
<collapsingstatus>0</collapsingstatus>
<hithighlightedsummary> <ddd /> <c0>信息</c0>辦整合了涉及全區37個政務部門的412類,264.3萬項政務基礎數據,研究建立以<c0>信息</c0>資源目錄為引導的<c0>信息</c0>資源共享服務體系。<c0>信息</c0>資源內容涵蓋經濟建設、社會管理與服務等多領域、多部門、多應用主題,將於 <ddd /> </hithighlightedsummary>
<hithighlightedPRopertIEs>
<HHTitle>區<c0>信息</c0>辦整合政務基礎數據,推進<c0>信息</c0>資源共享</HHTitle>
<HHUrl>http://172.25.0.185:7001/BMYW/XXB/2009/6339694771417558327245.Html</HHUrl>
</hithighlightedpropertIEs>
<contentclass>STS_ListItem_DocumentLibrary</contentclass>
<isdocument>1</isdocument>
<picturethumbnailurl></picturethumbnailurl>
<imageurl imageurldescription="類型結果: 文檔">/_layouts/images/Html16.gif</imageurl>
</Result>
<Result>
...
</Result>
</All_Results>
上面代碼可以能過修改MOSS搜索結果的XSL屬性看到,做法是把MOSS搜索核心結果WEB部件的XSL默認屬性改成:
代碼
<?XML version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" XMLns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="XML" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="*"/>
</xsl:template>
</xsl:stylesheet>
修改完後再查看搜索結果的Html源代碼就可以找到上面的XML代碼。從上面的代碼可以看出MOSS搜索結果返回的主要屬性有workid,title,url,HHTitle,HHUrl等這些屬性。
2. 添加元數據屬性映射
因為搜索結果返回的屬性是從元數據屬性映射過來的,所以對於我們要在搜索結果中新加的屬性必須選配置元數據屬性映射,關於如何配置元數據屬性映射,請看Bear-Study-Hard寫的《MOSS Search學習記錄(五):利用元數據和規則搜索多個列表中指定范圍的內容》,注意配好要啟動完全爬網,而不是添量爬網,要麼新加的屬性值為空。
3. 向搜索查詢添加屬性
打開搜索結果核心WEB部件的結果查詢選項中選定的列,可以看到裡面的Column就是我們剛剛從搜索結果的Html文件中查看到的XML文件的屬性,workid,title
,url,HHTitle,HHUrl等,在裡面加入我們要用於當鏈接的屬性,如添加><Column Name="LinkTo"/> ,LinkTo是文檔庫中的一個欄名,但它必須得是元數據的映射。
4. 修改搜索核心 Web 部件的 XSL,讓它包含新屬性
把搜索核心結果WEB部件的XSL修改回原來的,找到如下代碼:
代碼
<xsl:template match="Result">
<xsl:variable name="id" select="id"/>
<xsl:variable name="url" select="url"/>
<span class="srch-Icon">
<a href="{$url}" id="{concat('CSR_IMG_',$id)}" title="{$url}">
<img align="absmiddle" src="{imageurl}" border="0" alt="{imageurl/@imageurldescription}" />
</a>
</span>
<span class="srch-Title">
<a href="{$url}" id="{concat('CSR_',$id)}" title="{$url}">
<xsl:choose>
<xsl:when test="hithighlightedpropertIEs/HHTitle[. != '']">
<xsl:call-template name="HitHighlighting">
<xsl:with-param name="hh" select="hithighlightedpropertIEs/HHTitle" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise><xsl:value-of select="title"/></xsl:otherwise>
</xsl:choose>
</a>
<br/>
</span>
<xsl:choose>
<xsl:when test="$IsThisListScope = 'True' and contentclass[. = 'STS_ListItem_PictureLibrary'] and picturethumbnailurl[. != '']">
<div >
<a href="{$url}" id="{concat('CSR_P',$id)}" title="{title}">
<img src="{picturethumbnailurl}" alt="" />
</a>
</div>
</xsl:when>
</xsl:choose>
<div class="srch-Description">
<xsl:choose>
<xsl:when test="hithighlightedsummary[. != '']">
<xsl:call-template name="HitHighlighting">
<xsl:with-param name="hh" select="hithighlightedsummary" />
</xsl:call-template>
</xsl:when>
<xsl:when test="description[. != '']">
<xsl:value-of select="description"/>
</xsl:when>
</xsl:choose>
</div >
<p class="srch-Metadata">
<span class="srch-URL">
<a href="{$url}" id="{concat('CSR_U_',$id)}" title="{$url}" dir="ltr">
<xsl:choose>
<xsl:when test="hithighlightedpropertIEs/HHUrl[. != '']">
<xsl:call-template name="HitHighlighting">
<xsl:with-param name="hh" select="hithighlightedpropertIEs/HHUrl" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise><xsl:value-of select="url"/></xsl:otherwise>
</xsl:choose>
</a>
</span>
<xsl:call-template name="DisplaySize">
<xsl:with-param name="size" select="size" />
</xsl:call-template>
<xsl:call-template name="DisplayString">
<xsl:with-param name="str" select="author" />
</xsl:call-template>
<xsl:call-template name="DisplayString">
<xsl:with-param name="str" select="write" />
</xsl:call-template>
<xsl:call-template name="DisplayCollapsingStatusLink">
<xsl:with-param name="status" select="collapsingstatus"/>
<xsl:with-param name="urlEncoded" select="urlEncoded"/>
<xsl:with-param name="id" select="concat('CSR_CS_',$id)"/>
</xsl:call-template>
</p>
</xsl:template>
上面代碼就是搜索結果Result的配置,可以看到 <xsl:variable name="url" select="url"/>,下面的<a></a>鏈接中有<a href="{$url}">等結果,就明白它們是怎麼顯示的了,先把 <xsl:variable name="url" select="url"/>改成 <xsl:variable name="linkto" select="linkto"/>,然後再改鏈接<a href="{$url}">為<a href="{$linkto}">,保存好結果就是我們想要達到的了,在裡面還可以改或添加自己想達到的效果。