Media > AI活用ユースケース > マーケティング > ECサイトの検索で0件・少数だった検索語を毎月集めて原因で分類し、同義語辞書と表記ゆれの登録候補を作って商品が見つかるようにする

ECサイトの検索で0件・少数だった検索語を毎月集めて原因で分類し、同義語辞書と表記ゆれの登録候補を作って商品が見つかるようにする

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

サイト内検索で結果が0件か数件だった検索語を毎月集め、表記ゆれ・言い換え・誤字・取り扱いなしなどの原因で分類します。辞書で直せるものは同義語辞書に足す行の候補にし、担当者の承認後に反映します。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Vertex AI/OpenSearch
対象業界
EC/小売/製造
対象部門
マーケティング
対象業務
分類・仕分け/台帳・マスタ管理
主な課題
データ分析に時間がかかる/人手が足りない/属人化している
AIで行う処理
分類
主な効果
品質標準化/工数削減/機会損失防止
導入難易度
★★★★☆
実装レベル
本格構成
費用感
API連携(中)
人間の確認
条件付き
現在工数
90h/月
AI導入後
30h/月
想定削減
67%
年間削減
720h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 月初に、前月の検索ログからヒット件数が0件と3件以下の検索語を取り出し、検索回数の順に並べる
  2. 上から順に、商品管理システムで似た名前の商品を探す
  3. 商品があれば、表記ゆれ・言い換え・誤字のどれかを見て、辞書に足す行を書く
  4. 商品が無ければ、取り扱いなしとして商品部門への共有シートに書く
  5. 商品はあるが、検索語の属性(「撥水」「静音」など)が商品ページに無ければ、商品ページの担当へ伝える
  6. 辞書のファイルを直し、検索の索引に反映する
  7. 反映後に、足した語で検索して商品が出るかを確かめる
導入後(After)
  1. 自動月初に、前月の検索ログから0件と3件以下の検索語を取り出し、検索回数の順に並べる
  2. 自動検索語ごとに、条件をゆるめた検索で近い商品の候補を最大10件集める
  3. 自動検索語と商品の候補を生成AIに渡し、原因を分類させ、辞書に足す行の候補を作らせる
  4. 自動既存の辞書と照らし、重なる行・矛盾する行に印を付ける
  5. 自動辞書の候補を足した検証用の索引で、よく検索される語の結果が変わらないかを確かめる
  6. 人担当者が分類と辞書の候補を一覧で見て、採用・修正・却下を決める
  7. 自動採用した行を辞書のファイルに足し、パッケージを更新してドメインに反映する
  8. 自動取り扱いなしは商品部門へ、属性の記載不足は商品ページの担当へ、一覧で送る
  9. 【自動/人】 翌月の検索ログで、反映した語が0件から抜けたかを確かめる
各工程の詳しい説明を読む
  1. 月初に、前月の検索ログからヒット件数が0件と3件以下の検索語を取り出し、検索回数の順に並べる
  2. 上から順に、商品管理システムで似た名前の商品を探す
  3. 商品があれば、表記ゆれ・言い換え・誤字のどれかを見て、辞書に足す行を書く
  4. 商品が無ければ、取り扱いなしとして商品部門への共有シートに書く
  5. 商品はあるが、検索語の属性(「撥水」「静音」など)が商品ページに無ければ、商品ページの担当へ伝える
  6. 辞書のファイルを直し、検索の索引に反映する
  7. 反映後に、足した語で検索して商品が出るかを確かめる

(a)上位しか見られない。 0件の検索語は数千種類あり、1語ずつ商品を探していると、上位の数百語で月が終わります。 下位の語は1つずつは少なくても、合わせると検索回数のかなりの部分になります。

(b)原因の見分けが担当者による。 「ブランケット」で0件なら、取り扱いが無いのか、商品名が「ひざかけ」なのか。商品を探し当てられるかどうかは、担当者がその売場をどれだけ知っているかで決まります。 家電に詳しい担当は家電の語を、インテリアに詳しい担当はインテリアの語を、それぞれ多く直します。

(c)足した行が別の検索を壊す。 「マット」と「ラグ」を同じ意味にした翌月、「ヨガマット」の検索にラグが並んだ、ということが起きます。反映後の確認は足した語でしか行っておらず、ほかの語への影響は、お客様からの指摘で初めて分かります。

(d)取り扱いなしの声が商品部門に届かない。 4番の共有シートは書きっぱなしになりがちで、同じ語が何か月も0件のまま上位に残ります。 お客様が探している商品の情報が、品揃えの検討に使われていません。

  1. 【自動】 月初に、前月の検索ログから0件と3件以下の検索語を取り出し、検索回数の順に並べる
  2. 【自動】 検索語ごとに、条件をゆるめた検索で近い商品の候補を最大10件集める
  3. 【自動】 検索語と商品の候補を生成AIに渡し、原因を分類させ、辞書に足す行の候補を作らせる
  4. 【自動】 既存の辞書と照らし、重なる行・矛盾する行に印を付ける
  5. 【自動】 辞書の候補を足した検証用の索引で、よく検索される語の結果が変わらないかを確かめる
  6. 【人】 担当者が分類と辞書の候補を一覧で見て、採用・修正・却下を決める
  7. 【自動】 採用した行を辞書のファイルに足し、パッケージを更新してドメインに反映する
  8. 【自動】 取り扱いなしは商品部門へ、属性の記載不足は商品ページの担当へ、一覧で送る
  9. 【自動/人】 翌月の検索ログで、反映した語が0件から抜けたかを確かめる

5番が、この設計の分かれ目です。 足した行がほかの検索を壊していないかを、担当者が見る前に機械で確かめます。 結果が大きく変わった語がある行には印を付け、担当者はその行を重点的に見ます。

6番で人が見るのは、900語の全部ではなく、辞書に足す行の候補です。 取り扱いなし・属性の記載不足に分類されたものは、一覧で件数と語を流し見て、そのまま各部門へ送ります。

02今回想定するシステム構成

構成図
検索ログ(検索語・ヒット件数・日時)
   ▼【トリガー】月初の定時実行
AWS Lambda ── 0件・3件以下の語を取り出し、回数順に並べる
   ▼
Amazon OpenSearch Service ── 条件をゆるめた検索で近い商品の候補を集める
   ▼
Claude API(構造化出力)── 原因の分類と、辞書に足す行の候補
   ▼
AWS Lambda ── 既存の辞書との重なり・矛盾を検査
   ▼
Amazon OpenSearch Service(検証用の索引)── 候補を足した辞書で上位の語の結果を比べる
   ▼
【人】担当者が採用・修正・却下を決める
   ▼
同義語辞書のファイル(S3)→ パッケージの更新 → 本番のドメインに反映
   └──▶ 取り扱いなし → 商品部門 / 属性の記載不足 → 商品ページの担当
役割想定する製品代替候補
検索基盤Amazon OpenSearch Service(同義語のパッケージと kuromoji による日本語の解析)Azure AI Search、Vertex AI Search(Agent Search)
生成AIClaude API(構造化出力。原因の分類と辞書の行の候補)OpenAI API、Gemini API
連携AWS Lambda(ログの集計、候補の収集、辞書の検査、パッケージの更新)AWS Step Functions
保管Amazon S3(同義語辞書のファイル、月ごとの候補と判定の記録)─

検索のしくみと商品データは、置き換えません。 この構成が触るのは同義語辞書のファイルだけで、商品管理システムには書き込みません。最初の準備作業は、検索ログにヒット件数を残すことです。 検索語だけが残っていて件数が無いと、0件の語を取り出せません。

同義語辞書は、パッケージとして扱います。 Amazon OpenSearch Service では、同義語やストップワードの辞書ファイルを S3 に置き、パッケージとして取り込んでドメインに関連付けると、synonyms_path に analyzers/<パッケージのID> を指定して使えます。S3 のファイルを差し替えただけではドメインの辞書は変わらず、パッケージを更新し、ドメインに更新を適用する手順が要ります。

辞書を索引の作り直しなしで差し替えるには、検索側の解析器にだけ使います。 ドキュメントでは、トークンフィルタの updateable: true は検索の解析器にだけ適用され、OpenSearch または Elasticsearch 7.8 以降で、updateable を付けた検索の解析器だけを使っていれば、パッケージの更新の後は自動で索引に反映されるとされています。索引の解析器に使った場合や updateable を付けなかった場合は、索引を閉じて開き直すか、作り直しが要ります。毎月更新する辞書なので、検索の解析器に置く設計が前提です。

日本語の解析には、kuromoji を使います。 対応プラグインの一覧では、Japanese (kuromoji) Analysis と ICU Analysis が、ドメインにあらかじめ入っているプラグインとして OpenSearch 1.0 以降に載っています。日本語向けに勧められている Sudachi もありますが、Sudachi の辞書ファイルは関連付け直してもすぐには反映されず、次のブルー/グリーンのデプロイで更新されるとされています。この構成で毎月差し替えるのは同義語のファイルなので、解析器は kuromoji で組みます。

03どうやって実装するのか

Step1

処理の起点を決める

月初の定時実行で動かします。 前月の1日から末日までの検索ログを対象にします。毎日動かさないのは、同義語の行は1語ずつではなく、まとまりで判断したほうが矛盾に気づけるからです。 「スマホケース」と「スマホカバー」の行が別の日に別々に足されると、重なりに気づけません。

例外として、セールや新商品の発売の前には、臨時で動かします。 特集ページを出す商品群について、前月の0件の語のうちその売場に関係するものだけを先に処理します。

取り出す条件は2つです。 ヒット件数が0件の語と、1〜3件の語です。少数ヒットの語を入れるのは、0件と同じくらいお客様が困っているからです。 「電気毛布」で探して1件だけ出た場合、残りの電気毛布は商品名が「電気ブランケット」になっていて出ていないことがあります。

Step2

入力データを集める

データ中身取得元
検索ログ検索語、ヒット件数、日時、検索の後に商品を見たかサイトの検索ログ(S3 に月ごとに出力)
商品の候補条件をゆるめた検索で出た商品の名前・カテゴリ・商品ID(1語あたり最大10件)Amazon OpenSearch Service
既存の同義語辞書現在の辞書の全行と、行ごとに足した月・理由(今後の分)S3 の辞書ファイルと記録
よく検索される語の一覧前月の検索回数の上位1,000語と、そのときの上位10件の商品ID検索ログと検証用の索引
売場の一覧カテゴリの階層と、各カテゴリの担当者商品管理システム

質を決めるのは、商品の候補の集め方です。 生成AIは、渡された候補の中から根拠を探します。候補に正しい商品が入っていなければ、原因を「取り扱いなし」と分類するしかありません。 次の「データの取得方法」で、候補を集める検索を3通りに分けているのはそのためです。

検索ログには、個人を特定できる情報を入れません。 検索語に電話番号や氏名を入れるお客様がまれにいるため、取り出す段階で数字の並びやメールアドレスの形のものを外します。

Step3

データの取得方法を決める

検索ログは、検索のたびにサイトのアプリケーションが書き出しているものを使います。 検索語、ヒット件数、日時、その後に商品ページを開いたかを1行にします。ヒット件数は、検索エンジンが返した件数をそのまま書きます。

商品の候補は、本番の検索とは別の条件で集めます。 本番の検索で0件だったのですから、同じ条件で探しても出ません。

集め方中身拾えるもの
文字の断片での一致商品名を2文字ずつの断片にした項目で探す表記ゆれ、長音や中黒の違い、型番の区切りの違い
あいまい一致1〜2文字の違いを許して探す誤字、入力の打ち間違い
カテゴリ名・説明文での一致商品名ではなく、カテゴリ名と説明文で探す言い換え(「ひざかけ」と「ブランケット」など)

3つの集め方で出た商品を合わせ、1語あたり最大10件を候補にします。 どの集め方で出たかも候補に付けて渡します。表記ゆれは断片の一致で、言い換えは説明文の一致で出ることが多く、どの集め方で出たかが分類の手がかりになります。

文字の断片の項目は、候補を集めるための検証用の索引にだけ持たせます。 本番の索引に足すと、本番の検索の結果まで変わります。

Step4

AIへ渡す前に整形する

  1. ログの整理 … 前後の空白を取り、全角と半角、大文字と小文字をそろえてから同じ語をまとめます
  2. 個人情報らしい語の除外 … 数字が8けた以上続くもの、メールアドレスの形のものを外します
  3. ボットの除外 … 同じ時刻に同じ語が大量に出ているもの、意味の無い文字列を外します
  4. 件数での絞り込み … 0件の語と1〜3件の語を、それぞれ検索回数の順に並べ、上位を対象にします
  5. 既存の辞書との照合 … すでに辞書にある語は、辞書の行が効いていない理由を別に調べるため、印を付けます
  6. 候補の収集 … 3つの集め方で商品の候補を集めます
  7. 候補が0件の語の扱い … 3つの集め方でも1件も出ない語は、生成AIに渡さず「候補なし」として一覧に残します

5番目を省かないでください。 辞書にあるのに0件の語は、辞書の行の書き方が誤っているか、解析器の設定でその行が効いていないことを示しています。新しい行を足しても直りません。

7番目で生成AIに渡さないのは、根拠の無い分類を作らせないためです。 候補が無いと、生成AIは一般的な知識から「言い換え」と分類し、自社が扱っていない商品名を辞書の候補に書くことがあります。

Step5

AIに処理させる

させるのは、検索語ごとに、渡された商品の候補を根拠にして原因を1つ選び、辞書で直せるものについて辞書に足す行の候補を作ることです。

分類意味送り先
variant表記ゆれ(カタカナとひらがな、長音、中黒、略し方)辞書の候補
synonym言い換え(同じ物を別の言葉で呼んでいる)辞書の候補
typo誤字・打ち間違い辞書の候補(片方向)
model_number型番の書き方の違い(ハイフンや空白の有無)辞書の候補
attribute_missing商品はあるが、検索語の属性が商品データに書かれていない商品ページの担当
not_carried候補の中に該当する商品が無い商品部門
too_broad「収納」のように広すぎて、言い換えで結ぶと結果が崩れる却下(記録のみ)
unclear判断できない担当者

辞書の行は、同じ意味として扱う形(a, b, c)と、片方向に置き換える形(a => b)を使い分けさせます。 誤字は片方向です。「ふとn => 布団」は要っても、逆向きの行は要りません。 言い換えでも、意味の範囲が違うものは片方向にします。「ブランケット」で「ひざかけ」を出すのはよくても、「ひざかけ」で大判のブランケットまで出す必要はありません。

させないこと理由
候補に無い商品名を書く自社が扱っていない言葉を辞書に入れると、別の商品が出る
広い語を言い換えで結ぶ「ケース」と「カバー」のような行は、何百もの検索を変える
取り扱いなしを言い換えで埋める0件は消えるが、お客様は探していない商品を見せられる
商品データの書き換え属性の記載不足は商品ページの担当が直す
辞書への直接の反映採用は担当者が決める

3行目が、いちばん起きやすい失敗です。 「電動自転車」で0件のサイトに、候補として「自転車用ライト」が出ていると、関係がありそうだという理由で言い換えにします。 候補の商品が、検索語と同じ物かを判断の基準にし、関係がある物では結ばないことを指示に書きます。

Step6

指示内容を固定する

あなたはECサイトの検索の担当者を手伝います。
お客様が検索して0件または数件しか出なかった検索語について、
原因を分類し、同義語辞書に足す行の候補を作ってください。

【分類】次の中から1つ選んでください。
- variant ........ 表記ゆれ。候補の商品名と、文字の書き方だけが違う
- synonym ........ 言い換え。候補の商品と同じ物を、別の言葉で呼んでいる
- typo ........... 誤字・打ち間違い。候補の商品名の書き損じ
- model_number ... 型番の書き方の違い(ハイフン・空白・大文字小文字)
- attribute_missing 候補に同じ種類の商品はあるが、検索語の性質
                    (例:撥水、静音)が商品名・説明文に書かれていない
- not_carried .... 候補の中に、検索語と同じ物が無い
- too_broad ...... 検索語が広すぎ、言い換えで結ぶと多くの検索が変わる
- unclear ........ 判断できない

【厳守事項】
- 判断の根拠は、渡した商品の候補だけにしてください。
  一般的な知識で、自社が扱っている商品を想像しないでください。
- 辞書の行に書く言葉は、検索語と、候補の商品名・カテゴリ名に
  実際に出てくる言葉だけにしてください。
- 候補の商品が、検索語と「同じ物」のときだけ、variant / synonym /
  typo / model_number を選んでください。
  関係がある物、一緒に使う物、似た用途の物は not_carried です。
- 誤字は片方向(誤 => 正)にしてください。
- 意味の範囲が違う言い換えは、片方向にしてください。
- 1語だけで意味の広い言葉(例:ケース、カバー、マット、収納)を
  同じ意味の行に入れないでください。too_broad にしてください。
- evidence_ids には、判断の根拠にした商品IDを書いてください。
- 迷ったときは unclear にしてください。

【検索語】{query}(前月の検索回数 {count} 回、ヒット件数 {hits} 件)
【商品の候補】{candidates}(商品ID、商品名、カテゴリ、出た集め方)
【この語を含む既存の辞書の行】{existing_rules}

「同じ物のときだけ」を、関係がある物の例まで挙げて書いています。 書かないと、一緒に使う物(「プリンター」と「インク」)や、似た用途の物(「加湿器」と「除湿機」)を言い換えにします。辞書に入れば、検索のたびに別の商品が出ます。

広い語を名指しで禁じているのは、1行の影響が大きいからです。 例として挙げた4語は、どれも商品名の後半に付く語です。これらを含む行は、その語を含む全部の検索に効きます。

Step7

出力形式を固定する

構造化出力で、次の形のJSONを受け取ります。

{
  "query": "",
  "category": "variant | synonym | typo | model_number | attribute_missing | not_carried | too_broad | unclear",
  "rule": {
    "type": "equivalent | one_way | none",
    "line": "",
    "terms": []
  },
  "evidence_ids": [],
  "route_to": "dictionary | product_page | merchandising | reviewer",
  "note": ""
}

1つ目の理由は、category と route_to で、送り先を機械で分けられることです。 辞書の候補は担当者の一覧へ、attribute_missing は商品ページの担当へ、not_carried は商品部門へ、自動で振り分けます。category は enum で決まった値しか返らないため、分類の名前の書き方のゆれで振り分けが漏れることがありません。

2つ目は、rule.line をそのまま辞書の形式で受け取れることです。 line には スマホケース, スマホカバー, スマートフォンケース や ふとn => 布団 の形で入ります。terms に行の中の語を分けて持たせ、ワークフローがその語が検索語か候補の商品名・カテゴリ名に実際に出てくるかを照らします。 出てこない語が入っていれば、行を却下します。

3つ目は、evidence_ids で担当者の確認が速くなることです。 一覧で根拠の商品を開けば、同じ物かどうかを画像で確かめられます。

構造化出力は、JSON スキーマに沿った応答を制約付きのデコードで保証します。 enum と required が使え、スキーマに合わない応答をやり直す必要がありません。ただし、数値の minimum や文字列の maxLength のような制約は使えないため、terms の数や行の長さはワークフローの側で確かめます。

Step8

システムへ連携する

つなぎ先方式内容
検索ログS3 の読み取り前月の検索語とヒット件数
Amazon OpenSearch Service(検証用)検索のAPI商品の候補の収集と、辞書の候補を足したときの結果の比較
Claude APIAPI呼び出し(構造化出力)原因の分類と辞書の行の候補
担当者の一覧スプレッドシートまたは社内の画面採用・修正・却下の判定
Amazon OpenSearch Service(本番)パッケージの更新と適用採用した行を足した辞書を反映
商品部門・商品ページの担当一覧の送付取り扱いなし、属性の記載不足

検証用の索引で、反映の前に結果を比べます。 本番と同じ商品データと解析器を持つ索引に、候補を足した辞書を入れ、前月の検索回数の上位1,000語の上位10件の商品が、どれだけ入れ替わるかを数えます。大きく入れ替わる語があれば、その原因になった行に印を付けて担当者の一覧に出します。

本番への反映は、パッケージの更新で行います。 辞書のファイルを S3 に置き直し、パッケージを更新し、ドメインに更新を適用します。関連付けの状態が有効(Active)になるのを待ってから、反映した語で検索して確かめます。

辞書のファイルの大きさにも気をつけます。 ドキュメントでは、辞書ファイルは大きさに比例して Java のヒープを使うとされています。毎月足すだけで消さないと、辞書は大きくなり続けます。

Step9

人が確認する

担当者が見るのは、辞書の候補の行です。 900語のうち、辞書の候補になるのは一部で、残りは各部門への一覧と却下の記録です。

  1. 印の付いた行を先に見る … 検証用の索引で上位の語の結果を大きく変えた行、既存の辞書と重なる・矛盾する行です
  2. 根拠の商品を開く … evidence_ids の商品を開き、検索語と同じ物かを確かめます
  3. 同じ意味か片方向かを決める … 意味の範囲が違えば片方向に直します
  4. 採用・修正・却下を記録する … 却下には理由を付けます
  5. unclear を見る … 担当者が判断し、判断がつかなければ売場の担当に聞きます

1番目を必ず先に見てください。 上位の語の結果を変える行は、採用すれば翌日から何万回もの検索に効きます。 0件の語を1つ直すために、よく使われる検索を崩していないかを確かめます。

目標は、900語をならして1語2分です。 辞書の候補は根拠の商品を開いて見るので数分かかり、各部門への一覧と却下は流し見で数秒です。

Step10

例外に対処する

起きること対応
3つの集め方でも候補が0件生成AIに渡さず「候補なし」。件数が多ければ商品部門へ
辞書の行に、検索語と候補に無い語が入った行を却下し、unclear として担当者へ
既存の辞書の行と矛盾する両方の行を並べて担当者へ。既存の行を自動で消さない
すでに辞書にあるのに0件解析器の設定と行の書き方を調べる。新しい行は足さない
検証用の索引で上位の語の結果が大きく変わる印を付けて担当者へ。採用は担当者の判断
パッケージの更新が失敗する本番の辞書は前の版のまま。失敗した版の行を記録に残し、翌日にやり直す
検索語に個人情報らしいものが入っていた取り出しの段階で除外。記録にも残さない
生成AIが応答しない・拒否したその語を「未処理」として翌月に回す

3行目で既存の行を自動で消さないのは、行の理由が残っていないからです。 古い行にも、当時の売場の事情があったかもしれません。消すのは担当者が理由を確かめてからにします。 今後足す行には、足した月と理由を必ず記録します。

Step11

記録を残す

  • 月ごとに取り出した検索語と、検索回数・ヒット件数
  • 検索語ごとの商品の候補と、どの集め方で出たか
  • 生成AIの分類と辞書の行の候補(応答の全文)
  • 検証用の索引での比較の結果(上位1,000語のうち、上位10件が入れ替わった語と入れ替わりの数)
  • 担当者の判定(採用・修正・却下と、却下の理由)
  • 辞書のファイルの版と、行ごとに足した月・理由・根拠の商品ID
  • 反映した語の、翌月のヒット件数

6つ目で行ごとに理由を残すのが、3年後に効きます。 今の辞書の約3,000行は、理由が無いために消せない行です。理由と根拠の商品IDがあれば、その商品の取り扱いが終わったときに、関係する行を洗い出せます。

最後の行で、反映した語が0件から抜けたかを見ます。 抜けていなければ、行の書き方か解析器の設定に原因があります。

04実装レベルの3段階

最小構成:0件の語と、人が探した商品の名前を手元のAIサービスに貼り、分類させる / 原因の分類と行の候補
半自動化:上記+検索ログの集計と、3つの集め方での候補の収集を自動にし、分類を一覧に書き出す / 集計、候補の収集、分類
本格構成:上記+既存の辞書との照合、検証用の索引での比較、パッケージの更新、各部門への送付まで自動にする / 0件の語の処理の全体

半自動化で、1語6分が3分程度になります。 商品を探すところと分類は自動になりますが、辞書のファイルを直して反映し、ほかの語への影響を確かめる作業が残ります。 本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、反映の前の比較を、人が検索し直さずに済むようになるからです。 段階を飛ばさないでください。 半自動化で2か月ほど分類の一覧を見ると、どの売場で0件が多いか、どの集め方で候補が出やすいかが分かります。そこで集め方を直してから比較と反映を自動にするほうが、印の付く行が減ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
3 名
月間件数
900 件
1件あたり現在時間
6 分
1件あたり導入後時間
2 分
現在  900件 × 6分 ÷ 60 = 90 時間/月
導入後 900件 × 2分 ÷ 60 = 30 時間/月
月間削減時間
60h
削減率
67%
年間削減時間
720h
年間金額換算(時間単価3,500円)
252万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 日用品・家電・インテリア・アパレルなど数万点以上の商品を扱い、サイト内検索を Amazon OpenSearch Service で動かしているEC事業者・小売のネット通販部門・メーカー直販サイト。検索ログに検索語とヒット件数が残っており、0件の検索語が毎月数千種類出ているのに、同義語の登録が担当者の手作業で追いついていない場合。
向いていない
  1. 商品数が数百点で、検索よりカテゴリから選ばれることが多いサイト。サイト内検索を外部のSaaSに任せていて、同義語辞書を自社で持てない場合。検索ログにヒット件数が残っておらず、0件の検索語を取り出せない場合。なお、どの言い換えを同じ意味として扱うかと、取り扱いの無い商品を品揃えに加えるかは、担当者と商品部門が決めます。

07最小構成で試す方法

  1. 前月の検索ログから、0件の検索語を検索回数の順に50語取り出す
  2. 50語それぞれについて、担当者が商品管理システムで近い商品を探し、名前を5件ずつ書き出す
  3. 検索語と商品の名前を、手元のAIサービスに貼り付ける
  4. 「この検索語の原因を、表記ゆれ・言い換え・誤字・型番・属性の記載不足・取り扱いなし・広すぎる・判断できない から1つ選び、辞書で直せるものは同義語辞書の行を書いてください。商品の候補に無い言葉は使わないでください」と指示する
  5. 出てきた分類と行を、担当者が自分で判断した結果と突き合わせる

2番目で、担当者が商品を探すところは手作業のままにします。 最小構成で確かめたいのは、商品の候補があれば分類と行の候補が作れるかです。候補を集める検索は、半自動化の段階で作ります。

出てきた内容判断
担当者と同じ分類が、根拠の商品付きで出た候補の収集と検証用の索引の構築に進む
関係がある物を言い換えにした指示の書き方で直る。構成は有効
担当者が探した商品の候補が的外れで、分類がほとんど「取り扱いなし」候補の集め方が先。 AIの問題ではない

3行目の結果は、最小構成でもよく出ます。 担当者でも、知らない売場の商品は探し当てられません。その場合は、カテゴリ名と説明文での一致を先に試してください。

08実装時につまずきやすいポイント

問題対策
関係がある物を言い換えにする「同じ物のときだけ」を例付きで指示し、根拠の商品を人が開く
広い語の行がほかの検索を壊す検証用の索引で上位1,000語の結果を比べ、大きく変わる行に印を付ける
取り扱いなしを言い換えで埋めるnot_carried を商品部門へ送り、辞書には入れない
候補に正しい商品が出ない断片・あいまい・説明文の3通りで集める
S3 のファイルを変えたのに反映されないパッケージを更新し、ドメインに更新を適用する
更新が自動で索引に反映されないupdateable: true は検索の解析器だけ。索引の解析器に使っていれば閉じて開くか作り直す
Sudachi の辞書を毎月差し替えようとする関連付け直しはすぐ反映されない。同義語は kuromoji の構成で差し替える
辞書が大きくなり続ける行ごとに理由と根拠の商品IDを残し、取り扱いの終わった商品の行を見直す
辞書にあるのに0件の語に行を足す既存の行が効いていない原因を先に調べる
検索語に個人情報が入る取り出しの段階で数字の並びとメールアドレスの形を外す

上の3行が、この構成の失敗のほとんどです。 どれも、0件を消すことを目的にしてしまうと起きます。 目的は0件を消すことではなく、探している商品にたどり着けるようにすることです。

5行目と6行目は、最初の反映で必ず一度は迷います。 「辞書を直したのに効かない」の原因は、たいていこのどちらかです。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: お客様の検索語、ヒット件数、商品データ(公開している商品名・カテゴリ・説明文)、同義語辞書です。検索語は匿名で扱い、会員IDとは結びつけません。

  1. 検索語から個人情報を外す … 検索窓に電話番号や氏名を入れるお客様がいます。取り出しの段階で外し、生成AIにも記録にも渡しません
  2. 会員の情報と結びつけない … この構成に要るのは検索語と回数だけです。誰が検索したかは使いません
  3. 辞書への反映を人が決める … 辞書の1行は、多くの検索の結果を変えます。採用は担当者が決め、自動で反映しません
  4. ほかの事業者の商標を言い換えに入れない … 他社のブランド名で検索したお客様に、自社の商品を言い換えで出す行は作りません。ブランド名は not_carried として扱い、行の候補から外します
  5. 取り扱いなしの情報を品揃えの判断にそのまま使わない … 0件の語は需要の手がかりですが、検索回数は需要そのものではありません。品揃えに加えるかは商品部門が判断します

誤りが起きた場合のリスクは、関係の無い商品を出してお客様を迷わせることと、よく使われる検索を崩すことの2つです。 前者は「同じ物のときだけ」の指示と根拠の確認で、後者は反映前の比較で防ぎます。どちらも、反映の前に止められる設計にしてあります。

10まず何から始めるか

1週目:検索ログを確かめる

検索ログに、検索語とヒット件数が残っているかを確かめます。残っていなければ、サイトのアプリケーションで書き出すようにします。あわせて、今の索引で同義語辞書を検索の解析器と索引の解析器のどちらで使っているかを確かめます。

2週目:50語で試す

前月の0件の語から50語を選び、担当者が探した商品の名前と一緒に手元のAIサービスで分類させます。関係がある物を言い換えにしていないか、取り扱いなしを埋めていないかを最優先で見ます。

3週目:辞書の行に理由を付ける

今の辞書の約3,000行のうち、件数の多い売場の行から、足した理由が分かるものに理由を書き足します。 分からない行は印を付けておきます。あわせて、商品部門と商品ページの担当に、一覧を送る形を相談します。

4週目:候補の収集を作る

検証用の索引に文字の断片の項目を持たせ、3つの集め方で候補を集めるところまで作ります。この時点では分類を一覧に出すだけで、辞書は手で直します。

2か月目: 検証用の索引での比較を足し、印の付く行を担当者が重点的に見る流れにします。3か月目以降: パッケージの更新と各部門への送付を自動にし、1語6分が何分になったかを実測します。反映した語が翌月に0件から抜けたかを毎月見て、抜けない語の原因を直す流れが回った時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-06/最終更新:2026-10-07
確認した内容情報源確認日
同義語・ストップワードの辞書ファイルを S3 から取り込んでパッケージにし、ドメインに関連付けて synonyms_path に analyzers/<ID> で使えること。updateable: true が検索の解析器にだけ適用されること。S3 のファイルを差し替えても自動では更新されず、パッケージの更新と適用が要ること。OpenSearch または Elasticsearch 7.8 以降で updateable 付きの検索の解析器だけなら自動で反映され、それ以外は閉じて開くか作り直しが要ること。辞書ファイルが大きさに比例して Java のヒープを使うこと。Sudachi の辞書が関連付け直しですぐ反映されないことAmazon OpenSearch Service: Importing and managing packages2026-10-06
ドメインにあらかじめ入っているプラグインの一覧に、Japanese (kuromoji) Analysis と ICU Analysis が OpenSearch 1.0 以降として載っていること。Sudachi Analysis が日本語向けに勧められていることAmazon OpenSearch Service: Plugins by engine version2026-10-06
synonym_graph が synonyms と synonyms_path のどちらかで規則を受け取り、Solr の形式(既定)でカンマ区切りの同じ意味の行と => の置き換えの行を書けること。expand の既定が true、lenient の既定が false であること。複数の語からなる同義語に対応することOpenSearch Documentation: Synonym graph token filter2026-10-06
構造化出力が制約付きのデコードで JSON スキーマに沿った応答を保証すること。output_config.format で指定すること。enum・required が使え、minimum・maximum・minLength・maxLength が使えないことClaude Docs: Structured outputs2026-10-06

どの言い換えを同じ意味として扱うか、取り扱いの無い商品を品揃えに加えるかは、担当者と商品部門で決めてください。 本記事は公開仕様で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0607)についてのご相談はこちらから。

AI活用について相談する
目次