可以使用简单的 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 查询框中键入的查询。