测试自定义查询功能 (FAST Search Server 2010 for SharePoint)

可以使用简单的 Windows PowerShell 脚本测试查询相关的功能。

上次修改时间: 2011年9月1日

这样能够更轻松地排查配置错误,并确定错误是存在于 FAST Search Server 2010 for SharePoint 场配置中还是 Web 部件配置中。

适用范围: SharePoint Server 2010

Windows PowerShell 脚本通过使用 KeywordQuery 接口运行查询

以下 Windows PowerShell 脚本通过 KeywordQuery 接口运行查询,并返回所选查询结果数据。该脚本有助于以下测试:

  • 验证托管属性是否包含预期内容

  • 验证查询结果是否返回正确的查询优化数据

  • 测试自定义相关性排序

  • 使用 FAST 查询语言 (FQL) 时测试高级查询功能

可以将以下示例代码保存为 .ps1 文件并在 SharePoint 2010 Management Shell 中运行它。

function usage($cmd) {
    write-host ""
    write-host "Simple FQL query tester."
    write-host "Returns first matching items including content for a custom"
    write-host "managed property, and associated query refinement data."
    write-host "Useful for testing ranking and custom refiners."
    write-host ""
    write-host "usage: $cmd <URL> <Hits> <Property> <Query>"
    write-host "  <URL>              - Specifies the URL for the query front-end"
    write-host "                       web server of the SharePoint farm."
    write-host "  <Hits>             - Number of hits to return."
    write-host "  <Property>         - Specifies the name of a managed property."
    write-host "                       Prints the content of the property and"
    write-host "                       associated query refiner data."
    write-host "                       Use lowercase only, even if the property name"
    write-host "                       contains uppercase letters."
    write-host "  <Query>            - The query string in FQL syntax."
    write-host "                       Use single quotes if it contains spaces or"
    write-host "                       double quotes."
    exit
}

# argument checks
switch ($args.count) {
    4 { $siteurl = $args[0]
        $hits = $args[1]
        $managedPropertyName = $args[2]
        $query = $args[3] }
    default { usage $myinvocation.mycommand.definition }
}

# The refiner has the same name as the managed property. 
$refiner = $managedPropertyName
$site = new-Object Microsoft.SharePoint.SPSite $siteUrl

# Use the KeywordQuery interface:
$kq = new-Object Microsoft.Office.Server.Search.Query.KeywordQuery $site
$kq.ResultsProvider = [Microsoft.Office.Server.Search.Query.SearchProvider]::FASTSearch
$kq.QueryText = $query
$kq.EnableFQL = 1

# Return title, url and the new managed property:
$props = $kq.SelectProperties
$cnt = $props.Add($managedPropertyName)
$cnt = $props.Add("title")
$cnt = $props.Add("url")
$cnt = $props.Add("rank")

# Number of hits to return:
$kq.RowLimit = $hits
$kq.ResultTypes = [Microsoft.Office.Server.Search.Query.ResultType]::RelevantResults -bor [Microsoft.Office.Server.Search.Query.ResultType]::RefinementResults
$kq.Refiners = $refiner
$rtc = $kq.Execute()

Write-Host ""
Write-Host -ForegroundColor Yellow "Search Result data"
Write-Host ""
Write-Host "Backend time        :" $rtc.DatabaseTime "ms"
Write-Host "Elapsed time        :" $rtc.ElapsedTime "ms"
Write-Host "Query terms         :" $rtc.QueryTerms

if ($rtc.Exists([Microsoft.Office.Server.Search.Query.ResultType]::RelevantResults))
{
    $crt = $rtc.Item([Microsoft.Office.Server.Search.Query.ResultType]::RelevantResults)
    $cdt = $crt.Table
    Write-Host "Results returned    :" $crt.Table.Rows.Count 
    Write-Host "Results total       :" $crt.TotalRows
    Write-Host ""
    Write-Host -ForegroundColor Yellow "Managed Property Value"
    $cdt.Rows | Format-Table -autosize -property title, url, rank, $managedPropertyName
}

if ($rtc.Exists([Microsoft.Office.Server.Search.Query.ResultType]::RefinementResults))
{
    $rrt = $rtc.Item([Microsoft.Office.Server.Search.Query.ResultType]::RefinementResults)
    $rdt = $rrt.Table
    Write-Host ""
    if($rdt.Rows.Count -gt 0)
    {
        Write-Host -ForegroundColor Yellow "Refinements"
        $rdt.Rows | Format-Table -autosize -property RefinerName, RefinementName, RefinementToken, RefinementCount
    }
    else
    {
        write-Host -ForegroundColor Red "No refinements found for refiner " $refiner
    }
}

备注

此脚本接受使用 FAST 查询语言 (FQL) 语法指定的查询。对于基本的属性筛选器(属性:值)和单个项目查询,语法类似于在任何 SharePoint Server 2010 查询框中键入的查询。

请参阅

概念

调试自定义项处理