Области поиска довольно просты в управлении программно.
Смотрите здесь .
Я сделал это, когда области поиска должны были быть выпущены как часть функции.
Работает нормально.
Ниже приведен код из статьи 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
Я бы добавил свойство к каждому сайту и использовал бы это свойство, чтобы определить, в какую область необходимо добавить каждую сеть.
Затем консольное приложение может пройти через каждую сеть на сервере и добавить правила области, чтобы добавить каждый URL в правильную область или нет.
Это позволило бы добавлять документы на сайт без необходимости явно устанавливать свойство "project" уровня документа, гарантируя, что документы не были исключены из поиска в определенной области.
Другим решением этой проблемы является итерация по каждому документу, добавление поля, если оно еще не существует, которое задает имя проекта, и задание этого имени проекта в документе, если оно не соответствует свойству сайта. Может оказаться долгосрочным заданием. Намного лучше использовать область поиска, я думаю.