2008-11-19 183 views
1

所以我們的場景是這樣的:我們有多個Sharepoint網站,這些網站是根據「請求」動態創建的。基本上每個新項目都有一個新的網站。現在,對於我們想要添加搜索子句的每個網站來說,只應該找到具有等於網站名稱的元數據標記值的內容。快速示例: 有2個網站/項目:熊和狼。 Sharepoint Search對這些網站的所有文檔/列表/等進行了索引,併爲它們提供了一個通用檔案。公用存檔中的所有文檔都有一個名爲「ProjectName」的屬性。當沃爾夫團隊的比爾想要在他的項目網站(沃爾夫)中搜索「規格說明」時,他只想看到與該項目相關的文檔。 那麼如何確保所有文檔的「ProjectName」值設置爲「Wolf」?如何將動態搜索參數添加到Sharepoint搜索?

我猜我可能在這裏使用範圍,但目前有〜200個網站,這是每個月增長,所以手動維護不是一個選項。如果有一個相對簡單的範圍自動化方法,優秀。

回答

1

搜索範圍很容易以編程方式進行管理。 見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

我將一個屬性添加到每個站點,並使用該屬性來確定每個網站需要被添加到該範圍。 然後,控制檯樣式的應用程序可以通過服務器上的每個網站並添加範圍規則以將每個網址添加到正確的範圍。

這將允許將文檔添加到網站,而不必明確設置文檔級別「項目」屬性,確保文檔在特定範圍內不會被排除在搜索範圍之外。

對此的另一個解決方案是遍歷每個文檔,如果尚未存在指定項目名稱的字段,則添加一個字段,並在文檔與該網站的屬性不匹配時在該文檔上設置該項目名稱。最終可能是一項長期運行的任務。使用我想的搜索範圍會更好。

+0

這種方法的問題,我相信,是我們的範圍是OR範圍。所以基本上我們要搜索屬性「ProjectName」== Wolf的所有文檔或者該屬性不存在的地方。使用範圍我們可以將其限制爲「ProjectName == Wolf」,但是這會排除大量文檔... – noocyte 2008-11-27 11:06:32

1

雖然你可以使用這個範圍,我不會推薦它。 href字段將爲您提供所有您需要的全部自動化搜索功能,而無需維護。

您可以執行搜索並根據站點URL將所選站點之外的所有項目過濾掉,作爲返回的任何項目的必需前綴。這可以工作,因爲給定一個網站http://server/bears,該網站內的所有項目的URL將是http://server/bears/的形式....

+0

不幸的是,我們有一個源於Sharepoint(Meridio實際)之外的源,因此這些URL不能用作過濾器...看起來像我們將直接添加查詢條件... – noocyte 2009-01-06 11:11:13