搜索範圍很容易以編程方式進行管理。 見here。
當搜索範圍需要作爲功能的一部分發布時,我已經完成了這項工作。
工作正常。
下面,代碼從上面的MS文章中解除。
private ServerContext serverctx = null;
private SearchContext searchctx = null;
serverctx = ServerContext.GetContext("SharedServices1");
searchctx = SearchContext.GetContext(serverctx);
Scopes scopes = new Scopes(searchctx);
foreach (Scope scope in scopes.GetSharedScopes())
TreeNode node = treeViewScopes.Nodes.Add(scope.Name);
foreach (TreeNode node in treeViewScopes.Nodes)
{
foreach (ScopeRule rule in scope.Rules)
{
if (rule is PropertyQueryScopeRule)
{
PropertyQueryScopeRule prule = (PropertyQueryScopeRule)rule;
TreeNode childnode = node.Nodes.Add("Property Query Rule: ");
childnode.Text += prule.Property.Name + " = " + prule.Value;
}
if (rule is AllContentScopeRule)
{
AllContentScopeRule arule = (AllContentScopeRule)rule;
node.Nodes.Add("All Content Rule");
}
if (rule is UrlScopeRule)
{
UrlScopeRule urule = (UrlScopeRule)rule;
TreeNode childnode = node.Nodes.Add("URL Rule: ");
childnode.Text += urule.MatchingString;
}
}
}
UPDATE
我將一個屬性添加到每個站點,並使用該屬性來確定每個網站需要被添加到該範圍。 然後,控制檯樣式的應用程序可以通過服務器上的每個網站並添加範圍規則以將每個網址添加到正確的範圍。
這將允許將文檔添加到網站,而不必明確設置文檔級別「項目」屬性,確保文檔在特定範圍內不會被排除在搜索範圍之外。
對此的另一個解決方案是遍歷每個文檔,如果尚未存在指定項目名稱的字段,則添加一個字段,並在文檔與該網站的屬性不匹配時在該文檔上設置該項目名稱。最終可能是一項長期運行的任務。使用我想的搜索範圍會更好。
來源
2008-11-19 20:34:58
Nat
這種方法的問題,我相信,是我們的範圍是OR範圍。所以基本上我們要搜索屬性「ProjectName」== Wolf的所有文檔或者該屬性不存在的地方。使用範圍我們可以將其限制爲「ProjectName == Wolf」,但是這會排除大量文檔... – noocyte 2008-11-27 11:06:32