3

「UniqueID」プロパティを管理プロパティにマップして、高度な検索結果に表示できるようにする方法を知っている人はいますか? 共有サービス管理でメタデータ プロパティ マッピング リンクを使用して新しい管理プロパティを作成しようとすると、このプロパティが表示されません。

SiteData または Lists Web サービスを使用すると、「ows_UniqueId」プロパティが表示され、オブジェクト モデルを使用して SPListItem.UniqueID プロパティにアクセスできますが、それをクロールされた/管理されたプロパティにマップする方法が見つからないようです。

4

2 に答える 2

0

ちょっと面倒で、おそらくサポートされていませんが、高度な検索結果に含めることができるように UniqueId をクロールされたプロパティ/マップされたプロパティにするために必要なことは次のとおりです...

最初に、検索するリストの UniqueId フィールドを内部的に変更して、非表示にせず、クローラーによってインデックス付けできるようにする必要があります。サンプル オブジェクト モデル コードを次に示します。

// this is the identifier for UniqueId
Guid g = new Guid("4b7403de8d9443e89f0f137a3e298126");
// we will need these for reflection in a bit
BindingFlags bf = BindingFlags.NonPublic | BindingFlags.Instance;
using (SPSite s = new SPSite("http://SharePoint/")) {
  // grab the list that contains what you want indexed
  // and the UniqueId field from that list
  SPList l = s.RootWeb.Lists["Your Custom List/Library"];
  SPField f = l.Fields[g];
  // We need to call the private method SetFieldBoolValue
  // to allow us to change the Hidden property to false
  MethodInfo mi = f.GetType().GetMethod("SetFieldBoolValue", bf);
  mi.Invoke(f, new object[] { "CanToggleHidden", true });
  f.Hidden = false;
  f.Update();
}

そのコードを (および対象とするすべてのリスト/ライブラリで) 実行したら、Shared Services Search Administration で次の 3 つの手順を実行する必要があります。

  • フル クロールを実行します。
  • フル クロールが完了したら、クロールされたプロパティ カテゴリ (通常はサーバー上の/ssp/admin/_layouts/schema.aspx?ConsoleView=crawledPropertiesView ) に移動し、ows_UniqueId というプロパティが存在することを確認します。次に、ows_UniqueId にマップする UniqueId という管理プロパティを作成する必要があります。
  • 別のフル クロールを実行します。

2 回目のフル クロールが完了すると、UniqueId を含むインデックスにデータが入力されているはずです。検索コア結果を変更することにより、高度な検索でそれを公開できます。

  • Web パーツを開いて編集する
  • 「結果クエリ オプション」を展開します。
  • 選択した列の XML を変更して、UniqueId の参照を含めます。
  • データ ビュー プロパティの XSL を変更して、UniqueId を出力するステートメントを含めます。
  • [OK] をクリックし、必要に応じてページを公開します
于 2010-10-12T14:58:58.090 に答える