Column

コラム

  • Vertex AI Search の検索フィルタ機能を使って...

Vertex AI Search の検索フィルタ機能を使ってみた

検索フィルタ

DataCurrent の金子です。Vertex AI Search の検索フィルタ機能を利用してみました。

検索フィルタを実装することで以下のような検索が可能になります。

  • 特定のユーザーが作成したドキュメントのみを検索する
  • 特定の日付範囲に作成されたドキュメントのみを検索する
  • 特定のカテゴリに属するドキュメントのみを検索する

事前準備

Vertex AI Search で検索フィルタ機能を利用するには、構造化データまたはメタデータを含む非構造化データで取り込む必要があります。

インデックス化したいデータが PDF などのメタデータを含む非構造化データの場合は、Cloud Storage を直に指定するのではなく、BigQuery 上にあらかじめメタデータを定義してからデータを取り込むとよいでしょう。

BigQuery を使った取り込み例

インデックス化したい PDF のメタデータが以下のように BigQuery テーブル上にあるとします。

document_idtitlemodified_by_namemodified_at
1顧客分析_特別価格用_縦柄チラシ_ver2.pptx佐藤花子2023-09-08
220200730_データ保護・ プライバシー対応 支援サービス ご紹介.pptx伊藤あや子2023-07-03
320230816_AI活用トライアルパッケージ_v1.pptx山田太郎2023-08-15
4202405_DataCurrentケイパ資料.pptx佐藤花子2024-06-18

このテーブルを Vertex AI Search に取り込む際は、テーブルを以下の形に変換します。

idjsonDatacontent.mimeType *1content.uri *1,2
1{“title”: “顧客分析_特別価格用_縦柄チラシ_ver2.pptx”, “modified_by_name”: “佐藤花子”, “modified_at”: “2023-09-08”}application/pdfgs://my_google_bucket/pdf/document_1.pdf
2{“title”: “20200730_データ保護・ プライバシー対応 支援サービス ご紹介.pptx”, “modified_by_name”: “伊藤あや子”, “modified_at”: “2023-07-03”}application/pdfgs://my_google_bucket/pdf/document_2.pdf
3{“title”: “20230816_AI活用トライアルパッケージ_v1.pptx”, “modified_by_name”: “山田太郎”, “modified_at”: “2023-08-15”}application/pdfgs://my_google_bucket/pdf/document_3.pdf
4{“title”: “202405_DataCurrentケイパ資料.pptx”, “modified_by_name”: “佐藤花子”, “modified_at”: “2024-06-18”}application/pdfgs://my_google_bucket/pdf/document_4.pdf

*1 content. は Struct (Record) 型を表します。

*2 content.uri は PDF の Cloud Storage URI を指定します。

このテーブルを Vertex AI Search で指定することで、メタデータを含む非構造化データをインデックス化することができます。

※ 詳しくは 公式ドキュメントの BigQuery の章 を参照してください。

検索フィルタを使った検索

Python を使って Vertex AI Search の検索フィルタを使った検索を行う方法を以下に示します。

from typing import List

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): サンプルコードを実行する前に、以下の変数を適切な値に置き換えてください。
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"          # Values: "global", "us", "eu"
# engine_id = "YOUR_DATA_STORE_UD"
# search_query = "YOUR_SEARCH_QUERY"
# search_filter = "modified_by_name: ANY(\"山田太郎\")"

def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
    search_filter: str,
) -> List[discoveryengine.SearchResponse]:

    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    client = discoveryengine.SearchServiceClient(client_options=client_options)

    serving_config = client.serving_config_path(
        project=project_id,
        location=location,
        data_store=engine_id,
        serving_config="default_search",
    )

    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        filter=search_filter,
    )

    response = client.search(request)

    return response

いくつかサンプルコードの出力例を見てみましょう。

山田太郎 が作成したドキュメントのみを検索する場合

response = search_sample(
    project_id="YOUR_PROJECT_ID",
    location="YOUR_LOCATION",
    engine_id="YOUR_DATA_STORE_UD",
    search_query="DataCurrent",
    search_filter="modified_by_name: ANY(\"山田太郎\")", # 山田太郎に絞って検索します。
)
modified_by_name = set()
for result in response.results:
    struct_data = result.document.struct_data
    modified_by_name.add(struct_data["modified_by_name"])

print(modified_by_name)
# {'山田太郎'} ← modified_by_name が山田太郎のもののみが検索されたことを示す

2024 年以降に更新されたドキュメントのみを検索する場合

response = search_sample(
    project_id="YOUR_PROJECT_ID",
    location="YOUR_LOCATION",
    engine_id="YOUR_DATA_STORE_UD",
    search_query="DataCurrent",
    search_filter="modified_at > \"2024-01-01\"", # 2024 年以降に更新されたドキュメントのみを返すようにします。
)
title = set()
for result in response.results:
    struct_data = result.document.struct_data
    title.add(struct_data["title"])

print(title)
# {'202405_DataCurrentケイパ資料.pptx'} ← 2024-06-18 に更新されたドキュメントのみが検索されたことを示す

まとめ

Vertex AI Search の検索フィルタ機能を使って、検索結果を絞り込むことができました。ドキュメントのメタデータをうまく使うことで、ユーザーが求める情報をより効率的に見つけることができそうですね。

自社に専門人材がいない、リソースが足りない等の課題をお持ちの方に、エンジニア領域の支援サービス(Data Engineer Hub)をご提供しています。

お困りごとございましたら是非お気軽にご相談ください。

【本件またはリリースに関するお問い合わせ先】
DataCurrent 広報
E-mail:info@datacurrent.co.jp

人気のコラムランキング

PICK UP

企業のDX推進におけるダッシュボード内製化について

DXmarketingPICK UP コラムダッシュボード内製化

企業のDX推進に向けた人材教育支援について

GA4marketingPICK UP コラム内製化

【データプライバシーコラム】電気通信事業法改正の解説(2022年7月時点)

CMPPICK UP コラムデータプライバシーデータプライバシーコラム個人情報保護

CMP導入時の注意点

CMPPICK UP コラムデータプライバシーデータプライバシーコラム個人情報保護

TOPへ
戻る