※ 本記事は、Florian Grasshoff, Ulrike Schwinnによる”Easy Database Search with APEX in 23c“を翻訳したものです。

2024年1月9日


Oracle Databaseでの検索方法を知っていますか? Oracleデータベースには、Oracle Textと呼ばれる全文検索が含まれており、完全に統合されており、テキスト・マイニング、分類、クラスタリングなどの拡張機能も提供しています。「通常」のデータベース・スキーマですぐに起動できます。最も簡単なユースケースは、1つの列内で全文検索を実行することです。しかし、さらに複雑なケースがサポートされます: 同じデータ・ソース内の複数の列内の検索、および複数のデータ・ソース内の検索もサポートされます。

Oracle Database 23cには、ユビキタス・データベース検索と呼ばれる新機能があり、様々なデータ・ソースでの検索が非常に簡単になります。自己管理索引を作成するために必要なコマンドは1つだけであり、別のソースを追加するために必要なコマンドは1つだけです。追加のPL/SQLコードを記述したり、Oracle Textデータストアなどに関する深い知識を持たずに、データ・ソースを検索に含めることができます。ユビキタス・データベース検索は、API DBMS_SEARCHを介して実装されます。これは、様々な列、表およびビューのコンテンツを含むドキュメントを検索するために必要なプリファレンスの事前定義されたセットを含むJSON検索索引です。

この機能はどのように使用できますか? もちろん、SQLアプリケーションや、SQL*Plus、SQL Developer、SQLclなどのツールで使用できますが、APEXでも使用できます。
JSON dataguide、RESTなどの他の興味深いデータベース機能と同様に、APEX開発チームは、この23c機能も実装しました。したがって、APEX 23.3では、ユビキタス・データベース検索の非常に直感的な実装を見つけることができます。

APEX開発チームのFlorian Grasshoff氏と話し合った際、共同作業で投稿を書くことにしました 🙂 

まず、SQL linemodeツールの使用時に必要なステップについて説明します。
ノート: 表データは、ムービー・データベースから取得されます。

1. index_name TMDB_SEARCHを使用して索引を作成します。

execute DBMS_SEARCH.CREATE_INDEX(index_name => 'TMDB_SEARCH');

2. データ・ソース表MOVIESおよびSHOWSを追加します。

execute DBMS_SEARCH.ADD_SOURCE(index_name =>'TMDB_SEARCH', source_name => 'MOVIES');
execute DBMS_SEARCH.ADD_SOURCE(index_name =>'TMDB_SEARCH', source_name => 'SHOWS');

3. ドキュメントを確認します。

select DBMS_SEARCH.GET_DOCUMENT(INDEX_NAME=>'TMDB_SEARCH', DOCUMENT_METADATA=>METADATA) as output 
from TMDB_SEARCH;

4. 問合せで検索します。

SQL> select metadata as output from TMDB_SEARCH where CONTAINS(data,'fuzzy(gumb)') > 0;

SQL> select title
from movies
where id in (
    select json_value(metadata, '$.KEY.ID')
    from tmdb_search
    where contains(data, 'fuzzy(gumb)') > 0
          and owner = 'OH'
          and source = 'MOVIES'
);

23cでの新しい全文検索: ユビキタス・データベース検索」の投稿では、必要なステップの詳細な説明を確認できます。

次に、APEXリリース23.2で同じことを実行するのがどれほど簡単かを示します。次のチュートリアルをまとめたFlorian氏に敬意を表します。 🙂

APEXでは、DBMS_SEARCHパッケージの知識は必要ありません。データベース内の既存のユビキタス検索索引およびソースは、単にUIで選択して検索に使用できます。また、たとえば、SQLがAPEXによって生成されるため、DBMS_SEARCH.GET_DOCUMENTファンクションを使用してSQL文を記述する必要はありません。

APEXアプリケーション検索機能を使用すると、データ・ソースが表、ビュー、リモート・データベース、REST APIのいずれであっても、1つの検索で異なるデータ・ソースに問い合せることができます。

APEX 23.2では、ユビキタス検索インデックスとそのソースをサポートするようになりました。

1) ワークスペースにログインし、アプリケーションを作成

new app image

2) 「共有コンポーネント」->「ナビゲーションと検索」->「構成の検索」を選択
この共有コンポーネントでは、検索するデータ・ソースと結果の表示方法を定義します。

navigation and search

3) 新しい検索構成を作成し、「Movies」などの名前を付けて、新しい検索タイプ「Oracle Ubiquitous Search」を選択

new search configuration step 1

4) ユビキタス検索索引およびソースの選択

new search configuration step 2

5) 検索結果UIのタイトルと摘要の列をマップ

new search configuration step 3

この時点で、基本的な検索構成を作成し、検索に使用する最も簡単な方法は、事前に作成された検索ページを使用することです。

6) 新しいページを作成し、「検索ページ」コンポーネントを使用

new search page step 1

7) 任意の名前を選択し、検索に使用する検索構成を選択

new search page step 2

8) ページを実行して検索を実行

search wonderful

数回のクリックで、APEXでユビキタス・データベース検索を使用できるようになりました。検索構成を定義し、アプリケーションで検索を実行するためのページを構築し、データ内ですでに検索を実行しました。
SQLの例で前に見たものはすべて、バックグラウンドで自動的に実行されます。

もちろん、検索構成でさらに設定して、たとえば、データ・ソースからの追加データとアイコンのかわりにイメージを表示することで、検索結果をカスタマイズできます。
この例では、movies検索ソースから列「VOTE_AVERAGE」、「GENRES」および「RELEASE_DATE」をマッピングして、検索結果のバッジ、サブタイトルおよび最終変更列の値を表示します。また、「POSTER_URL」列のURLを使用して、各ムービーの対応するイメージをロードします。

search configuration column mapping

search configuration icon

アプリケーションで同じ検索を実行すると、変更が視覚化されます。
フィルムごとに、対応する画像が読み込まれ、タイトルと説明に加えて、ジャンル、評価、リリース日を見ることができます。

search wonderful 2

私たちのアプリケーションは設計上レスポンシブになっており、ここではPixel 7 Proを使用した例を示しています。

search wonderful mobile

現時点では、contains式を適用して、完全な検索語が検索に使用されます。検索構成では、検索語を変換し、ファジー検索を適用する独自の「テキスト索引関数」を指定できます。たとえば、

search configuration text index function

前の例を挙げて、映画「Forrest Gump」を探していますが、検索語「Gumb」が使用されており、ファジィ検索のおかげで望ましい結果が得られます。


search fuzzy gumb

 

APEXには、SQLまたはPL/SQLの検索構成を使用するAPIもあります。
そのため、APIでは、SQL文をデータ・ソースとしてサポートするすべてのAPEXコンポーネントで検索構成を使用できます。独自の検索アプリケーションを構築したり、SQLまたはPL/SQLコードを使用してデータベース内の検索構成に直接アクセスすることもできます。

select * from table ( apex_search.search(apex_t_varchar2('movies'), 'wonderful') );


Oracleデータベース バージョン 23cでは、ユビキタス・データベース検索という素晴らしい機能が提供されるため、データの検索がはるかに簡単になります。APEXと組み合せて、1行のコードを記述せずに検索結果を美しく視覚化できます。自分で試してみてください!

続きを読む