---
title: "提案の追加"
slug: "adding-suggestions"
abstract: "SearchとAPI推薦の提案を得て、オートコンプリートクエリの提案を得る方法を学び、Sitecore Searchの予測検索結果を表示しましょう。"
---
# 提案の追加

widget.items.search.suggestionオブジェクトを追加すれば、ユーザーのクエリをオートコンプリートしたり予測検索結果を表示したりできる提案が得られます。

> !注提案を依頼する前に、管理者が **提案ブロック** を設定していることを確認してくださいSitecore Search。

このオブジェクトのデータモデルについては、[Search and Recommendation APIリファレン](https://doc.sitecore.com/search/en/developers/search-and-recommentation-api/index.html)スを参照してください。

## キーワードがあるときに提案を得る方法

キーワードに合わせるための提案を依頼する際は、queryとsuggestionの両方のオブジェクトを渡す必要があります。

例えば、訪問者がキーワード **クラウド** を検索していて、あなたは以下をしたいとします:

-   訪問者がキーワードを入力した後に5つのキーワード提案を表示します。
    
-   コンテンツタイトルと訪問者のコンテキストを使って関連するキーワード提案を表示するtitle\_context\_awareという事前定義されたsuggestion blockを使いましょう。
    
    > !注この例では、title\_context\_awareという提案タイプを使用します。ただし、管理者が定義した任意の提案タイプを使用できます。
    

以下はサンプルリクエストです:

{
 "widget": {
 "items": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "content",
 "search": {
 "suggestion": 
 {
 "max": 5,
 "name": "title\_context\_aware"
 }
 ,
 "query": {
 "keyphrase": "cloud"
 }
 }
 }
 
 },
 "context": {
 "locale": {
 "country": "us",
 "language": "en"
 },
 "user": {
 "uuid": "159871551-m7-17-44-1p-c0ya4nb69t8o0iho2eia-1667926756185"
 }
 }
}

以下はその要請への回答です:

{
 "widgets": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "content",
 "suggestion": {
 "title\_context\_aware": 
 {
 "text": "cloud on salesforce",
 "freq": 4
 },
 {
 "text": "cloud architecture",
 "freq": 4
 },
 {
 "text": "cloud portal",
 "freq": 3
 },
 {
 "text": "cloud portal technical",
 "freq": 3
 },
 {
 "text": "cloud resources",
 "freq": 2
 }
 
 }
 }
 ,
 "dt": 104,
 "ts": 1669689280650
}

ユーザーがキーワード*クラウド*に入ったときに示せる提案のリストが、レスポンスsuggestionオブジェクトに表示されているのがわかります。

## キーワードがないのに提案を得る方法

例えば、検索バーをクリックしていて何も入力していない場合など、キーワードに基づかない提案をリクエストすることもできます。

キーワードなしでアドバイスを得るには、以下の点を確認してください:

-   contextAwareまたはsortByAttributeアルゴリズムを使うsuggestion blockがSearchに存在し、そのsuggestion blockをリクエストで使います。
    
-   訪問者はあなたのウェブサイトを十分にクリックしているので、Searchはその人の好みに関する情報を集めることができます。
    
-   Personalization、ランキング、またはその両方が有効です。デフォルトではSearchはAPIリクエスト内で [パーソナライズ](https://doc.sitecore.com/search/ja/developers/search-developer-guide/integrating-using-rest-apis/using-the-search-and-recommendation-api-to-create-search-experiences/using-personalization.html "Using personalization") を有効にしますが、動作させるにはUUIDを通過する必要があります。ランキングについては、管理者にSearchで設定してもらい、APIリクエスト内で [ランク付け](https://doc.sitecore.com/search/ja/developers/search-developer-guide/integrating-using-rest-apis/using-the-search-and-recommendation-api-to-create-search-experiences/using-ranking.html "Using ranking") オブジェクトを渡すことでオプションで上書きできます。
    
    > !注パーソナライズやランキングを有効にしなくても、訪問者があなたのウェブサイトとやり取りしていなくても、キーワードなしで提案をリクエストすることは可能です。しかし、Searchには訪問者の好みに関するデータがないため、回答には提案は一切ありません。
    

キーワードがない場合に、*title\_context\_aware*というsuggestion blockを使った6つの提案を求めるサンプルリクエストがあります:

{
 "widget": {
 "items": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "content",
 "search": {
 "suggestion": 
 {
 "max": 6,
 "name": "title\_context\_aware"
 }
 
 }
 }
 
 },
 "context": {
 "locale": {
 "country": "us",
 "language": "en"
 },
 "user": {
 "uuid": "159871551-m7-17-44-1p-c0ya4nb69t8o0iho2eia-1667926756185"
 }
 }
}

## 検索のバックアップとして提案を使う

時には、訪問者が検索語を入力して検索ボタンをクリックし、提案をクリックしずに検索ボタンをクリックすることもあります。入力した用語に誤字があったり一致しない場合、Searchは結果を0回返し、訪問者は空白の検索ページを目にします。

この状況に対処するために、あなたには二つの選択肢があります。

-   *ページ上部に「どういう意味ですか?」*行をつけた空の検索ページを表示します。そして、訪問者が修正された語をクリックすると、その語の検索結果が表示されます。
    
    > !注これを行うには、「 *Did you mean* UI」要素を作成します。キーワードセクションがある *ときに「提案を得る* 」の指示のようにリクエストを作成し、「 *Did you mean mean* 」要素にレスポンス提案を渡します。
    
-   Searchを最初の提案を代替検索語として使うように設定してください。この場合、ユーザーは空の検索ページを見ることはありません。
    

もし後者の選択肢を選ぶなら:

-   suggestion.keyphrase\_fallbackプロパティをtrueに設定します。これを行うと、検索結果がゼロSearch場合は、最初の提案suggestion block最初の提案を代替キーワードとして使います。
-   空の response\_context オブジェクトを追加して、回答に代替検索語が含まれていることを確認してください。

例えば、訪問者が誤字で *「conten* 」を検索し、検索ボタンをクリックした場合です。 keyphrase\_fallback:trueを設定し、Searchが少なくとも1つの提案を生成できた場合、以下の出来事が起こります。

-   最初にリクエストを送信すると、Searchはキーワード *conten*を使ってバックエンド検索を行います。しかし、自動フォールバックを設定しているため、Searchは返答を返しません。
-   Sitecore Searchはこのsuggestion blockの最初の提案を代替キーワードとして再検索します。例えば、返される提案が *Content Cloud*、 *Content Hub*、 *Content Management*の順であると仮定します。Sitecore SearchはContent *Cloud* を代替キーワードフレーズとして使い、訪問者にはこのキーワードフレーズの結果が表示される検索ページが表示されます。

以下は、前述の例で訪問者が*conten*を検索した例で、3つのsuggestion blocks(*title\_context\_aware*、*title*、*およびtitle\_spelling* )を使った例です:

"widget": {
 "items": 
 {
 "entity": "content",
 "rfk\_id": "rfkid\_7",
 "search": {
 "content": {},
 "query": {
 "keyphrase": "conten"
 },
 "suggestion": 
 {
 "name": "title\_context\_aware",
 "max": 3,
 "keyphrase\_fallback": true
 },
 {
 "name": "title",
 "max": 3,
 "keyphrase\_fallback": true
 },
 {
 "name": "title\_spelling",
 "max": 3,
 "keyphrase\_fallback": true
 }
 ,
 "response\_context": {}
 }
 }
 
 }
}'

こちらがこのリクエストへのサンプル回答です:

{
 "widgets": 
 {
 "rfk\_id": "rfkid\_7",
 "entity": "content",
 "suggestion": {
 "title\_context\_aware": 
 {
 "text": "content cloud",
 "freq": 4
 },
 {
 "text": "content hub",
 "freq": 4
 },
 {
 "text": "content management",
 "freq": 3
 }
 ,
 "title": 
 {
 "text": "content editor vs experience editor",
 "freq": 4
 },
 {
 "text": "content management and delivery",
 "freq": 3
 },
 {
 "text": "content hub sitecore documentation",
 "freq": 3
 }
 ,
 "title\_spelling": 
 {
 "text": "content",
 "freq": 2
 },
 {
 "text": "contents",
 "freq": 4
 }
 {
 "text": "contentful",
 "freq": 4
 }
 
 }
 }
 ,
 "dt": 104,
 "ts": 1669689280650,
 "response\_context": {
 "keyphrase": "content cloud",
 "original\_keyphrase": "conten"
 }
}

Searchが検索に「 *コンテンツクラウド* 」という用語(「そのkeyphrase)」を使ったのは、最初のsuggestion block提案が最初の提案だったからです。