【SharePoint Online】PnP Modern Searchを解説

こんにちは。
今回は、SharePoint PnP(Pattern and Practice)で公開されている、
[PnP Modern Search]の解説をしてみたいと思います。
それではいきましょう。

[PnP Modern Search]とは?

[PnP Modern Search]とはGithubで公開されているアプリで、
SharePointのモダンUIで利用できる検索用Webパーツです。
Webパーツ自体は6つ存在していて、
今回はその中でもメインとなる[Search Result Webパーツ]を重点的に解説します。
このWebパーツは、実はクラシックUIの「コンテンツ検索Webパーツ」の代替となるWebパーツです。
もしモダンで検索をカスタマイズしたい場合は便利なWebパーツです。
公開ページはこちら

因みにこれは公式でアナウンスされているオープンソースです。

事前準備

作業に入る前にアプリカタログにアプリを登録し、
各サイトで利用できるようにしておく必要があります。
アプリカタログの構築についてはこちらの記事を確認してください。
テナント全体に展開しても、各サイトに展開しても問題ありません。
対象サイトでWebパーツが利用できるようになったことを確認しましょう。

利用方法

Webパーツは、以下6つが追加されます。
よく利用する使い方として、[Search Box]と[Search Result]を連携させて検索結果を表示するという利用方法です。
その他にも静的クエリを実行するだけの利用方法などもあります。

Search Box検索用のボックスを構成するWebパーツです。
単体での利用はできません。
Search Result検索結果を表示するWebパーツです。
検索クエリを実行して結果を出力するメインとなるWebパーツです。
Search Refiners絞り込み条件を構成できるようにするWebパーツです。
Search Paginationページング機能を構成できるようにするWebパーツです。
Search Navigationナビゲーション機能を構成できるようにするWebパーツです。
Search Verticals検索フィルタ機能を構成できるようにするWebパーツです。

Search BoxとSearch Resultの連携

[Search Box]と[Search Result]の連携を行うと、[Search Box]内のキーワードでの検索結果を[Search Result]に表示することができます。
連携設定は簡単で、[Search Result]のプロパティから連携を行うことができます。
後ほど詳細は説明しますが、一旦接続してみましょう。
[Search Result]のプロパティから、[…]-[ソースに接続]とクリックしてください。

続いて以下の通り設定します。
[ソースに接続]⇒”Search Box”
[Search Boxのプロパティ]⇒”Search query”
[Search queryのプロパティ]⇒”Raw user search query”

これで準備は完了です。
試しに検索してみるとちゃんと結果が表示されました。

Search Resultプロパティ解説(1ページ目)

長くなりましたがやっと本題です。
[Search Result]には3ページ分のプロパティが存在します。
まずは1ページ目の解説です。

まず、画像下部の[Search query keywords]ですが、
これは静的クエリで検索したい場合に利用します。
[Search Box]と連携して検索を行う場合にはこちらは非表示になります。

次に[Search query configuration]の右側にある「…」から、
「ソースに接続」と進んだ場合です。
[ソースに接続]というのは、同じページ内に[Search Box]のWebパーツが存在するときに連携できる機能です。
※Search Box以外にもページ自体に飛ばされたクエリとも接続したりすることができます。

プロパティは以下を確認してください。
[Search query のプロパティ]の選択肢には、
他に[NLP enhanced search query]という選択肢がありますが、
これは自然言語で検索を行うかどうか選択できます。

プロパティ解説(2ページ目)

続いて2ページ目です。
2ページ目は検索設定です。
どのプロパティを取得するか、どのように表示するかなどです。

[Query Template]はKQLでクエリを入力することで検索範囲を指定したり、
条件を決定することが可能です。
例えば、、、

・カレントサイトのみ検索する
path:{site}
・Wordファイルのみを検索する
filetype:docx
・本日更新されたアイテムのみを検索する
LastModifiedTime=today

など入力することができます。
詳しくは以下公式サイトを確認してください。

KQLに関しての参考情報
https://docs.microsoft.com/ja-jp/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference
SharePoint側で用意されているクエリ変数に関する参考情報
https://docs.microsoft.com/en-us/SharePoint/technical-reference/query-variables?redirectedfrom=MSDN

ちなみにハブサイトの連携サイトのみ検索したい場合は、
DepartmentIDで絞り込むことができます。

プロパティ解説(3ページ目)

最後に3ページ目です。
ここでは表示レイアウトや、表示列など表示方法に関する設定を行います。

ここで注視する設定項目は、[Edit template]の項目です。
ここでは選択するテンプレート[Results layout]を元にカスタマイズを行うことができます。
ただし、編集を行うにはHandlebarsの知識が必要となります。
ですがスタイルの変更だけであれば容易に実装できるので、
もし特定のテンプレートでスタイルだけを変更したいのであればHandlebarsの知識は不要となります。
構文に関しては公式サイトを確認してください。
今回はHandlebarsの解説は省略します。

続いて[Manage columns]に関してです。
ここでは表示するカラムを設定することができるのですが、
カラムの値は取得している管理プロパティからしか選択できません。

取得している管理プロパティというのは、
2ページ目の[Selected Properties]で設定することができます。
もし取得したいプロパティが表示されなければ、
[Selected Properties]でチェックが入っているか確認しましょう。

各Webパーツとの連携での注意点

プロパティに関しては一旦ここまでとします。
最後に各検索用のWebパーツと[Search Result]を連携する場合の注意点を説明します。

例えば、検索結果にページング機能を実装したい場合には[Search Pagination]と連携するように設定する必要があります。
[Search Pagination] Webパーツは、
どの[Search Results] Webパーツと連携するかというプロパティのみがあります。
ですが、これを設定しただけでは正常にページングしません

実は[Search Pagination]で連携設定以外に、[Search Results]側でも連携設定をしてあげなければなりません。
[Search Results]側の[Connect to a search pagination Web Part]をオンにして、
[Use pagination from this component]で対象の[Search Pagination]を指定しましょう。

意外と見落としがちで、私はこれがわからずに30分ほど苦戦しました。。。
皆様も注意してください!

終わりに

今回は以上となります。
先日カスタマイズされていないクラシックページが、
自動的にモダンページに変更されるというアナウンスがありました。
今後どんどんモダンUIのカスタマイズは需要が高まっていくので、
こういうアプリも覚えておくと工数をガクンと減らせるチャンスです。

それではまた。