Как добавить параметры динамического поиска в поиск Sharepoint? - PullRequest
1 голос
/ 19 ноября 2008

Таким образом, наш сценарий таков: у нас есть несколько сайтов Sharepoint, которые создаются динамически по запросу. По сути, есть новый сайт для каждого нового проекта. Теперь для каждого сайта мы хотим добавить условие поиска, которое гласит, что должно быть найдено только содержимое со значением тега метаданных, равным sitename. Быстрый пример: Есть 2 сайта / проекта: Медведь и Волк. Sharepoint Search имеет индекс всех документов / списков / и т. Д. С этих сайтов и общий архив для них. Все документы в общем архиве имеют свойство «ProjectName». Когда Билл, который входит в команду Wolf, хочет найти «спецификации» на своем сайте проекта (Wolf), он хочет видеть только документы, относящиеся к этому проекту. Итак, как мне убедиться, что для всех документов значение «ProjectName» установлено в «Wolf»?

Я предполагаю, что я мог бы использовать области здесь, но в настоящее время есть ~ 200 сайтов, и это растет с каждым месяцем, и поэтому поддерживать это вручную не вариант. Если есть относительно простой способ автоматизации Scopes; отличный.

Ответы [ 2 ]

1 голос
/ 29 декабря 2008

Хотя вы могли бы использовать области для этого, я бы не рекомендовал это. Поле href предоставит вам все необходимое для полной автоматизации поиска без необходимости постоянного обслуживания.

Вы можете выполнить поиск и отфильтровать все элементы за пределами выбранного сайта на основе URL сайта в качестве обязательного префикса для любых возвращаемых элементов. Это работает, потому что, например, на сайте http://server/bears, URL-адреса всех элементов сайта будут иметь форму http://server/bears/....

1 голос
/ 19 ноября 2008

Области поиска довольно просты в управлении программно. Смотрите здесь .

Я сделал это, когда области поиска должны были быть выпущены как часть функции.

Работает нормально.

Ниже приведен код из статьи 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" уровня документа, гарантируя, что документы не были исключены из поиска в определенной области.

Другим решением этой проблемы является итерация по каждому документу, добавление поля, если оно еще не существует, которое задает имя проекта, и задание этого имени проекта в документе, если оно не соответствует свойству сайта. Может оказаться долгосрочным заданием. Намного лучше использовать область поиска, я думаю.

...