検索
Version 25.3.9411
Version 25.3.9411
検索
CData API Server は、次の例で示すようにOData の$search 関数をサポートしています:
http://MyServer:MyPort/api.rsc/Cars?$search='Peugeot'
Note:MySQL、SQL Server、およびMongoDB は、標準検索に加えてフルテキスト検索もサポートしています。
標準検索
標準$search は、特定の文字列に一致するレコードを取得する最もシンプルな方法です。この方法は、LIKE 演算子を使用したSQL クエリを使って結果を返します。標準検索は、すべてのCData データソースでサポートされています。
特定カラムの標準検索の有効化
デフォルトでは、検索はすべての文字列カラムに対して有効になっています。必要に応じて、特定のカラムに検索を制限することができます。テーブルのスキーマで、検索に含める各カラム定義にother:search="true" を追加します。他の文字列カラムは、検索不可能とみなされます。
<api:info title="Cars" desc="Access the Cars database through REST APIs." connection="SQLiteCars">
<attr name="ID" key="true" xs:type="int" />
<attr name="Make" xs:type="string" other:search="true" />
<attr name="Model" xs:type="string" other:search="true" />
<attr name="Trim" xs:type="string" />
<attr name="Color" xs:type="string" />
<attr name="Cost" xs:type="double" />
<attr name="CreatedDate" xs:type="datetime" />
<attr name="InStock" xs:type="boolean" />
</api:info>
標準検索の使用
以下のリクエストを考えてみましょう:
http://MyServer:MyPort/api.rsc/Cars?$search='Peugeot'
このリクエストにより、次のSQL クエリがデータベースプロバイダーに渡されます:
SELECT Make, Model, Trim, Color FROM Cars WHERE (Make LIKE "%Peugeot%") OR (Model LIKE "%Peugeot%")
スペースを含む正確な表現を検索するには、表現を二重引用符で囲みます。次の式は Mini Cooper というフレーズに一致するレコードを検索します:
http://MyServer:MyPort/api.rsc/Cars?$search="Mini Cooper"
論理演算子の使用
API Server の$search 機能は、以下の演算子をサポートしています:
| 演算子 | 説明 | サンプルOData |
|---|---|---|
| NOT | 用語と一致しないレコードを返す | api.rsc/Cars?$search=NOT Peugeot |
| AND | 両方の用語と一致するレコードを返す | api.rsc/Cars?$search=Peugeot AND Renault |
| OR | どちらかの用語と一致するレコードを返す | api.rsc/Cars?$search=Peugeot OR Renault |
括弧を使用して、論理演算子を複数の検索式と組み合わせたり並べ替えたりすることができます。
Note:OData 標準に従って、引用符で囲まれていないスペースで区切られた2つの検索ワードを指定することは、AND 演算子を使用することと同等になります。
フルテキスト検索
フルテキスト検索は、文字列値に一致するレコードを見つけるためのより強力な方法です。この方法では、インデックスを使用して、大規模な検索プールでより効率的に関連する結果を見つけることができます。データベース側でフルテキスト検索を有効にする必要があります。方法については、データベースのドキュメントを参照してください。フルテキスト検索は、SQL Server、MySQL、およびMongoDB でサポートされています。
Note:フルテキスト検索の設定によって、返される結果に影響がある場合があります。
フルテキスト検索の有効化
テーブルでフルテキスト検索を有効にするには、API ページに移動し、テーブルへのリンクをクリックします。フルテキスト検索を有効化トグルをON にします。あるいは、以下の例で示すように、テーブルスキーマのtitle 行にother:fulltextsearch="true" を追加します。
<api:info title="Cars" desc="Access the Cars database through REST APIs." connection="MySQLCars" other:fulltextsearch="true" >
<attr name="ID" key="true" xs:type="int" />
<attr name="Make" xs:type="string" />
<attr name="Model" xs:type="string" />
<attr name="Trim" xs:type="string" />
<attr name="Color" xs:type="string" />
<attr name="Cost" xs:type="double" />
<attr name="CreatedDate" xs:type="datetime" />
<attr name="InStock" xs:type="boolean" />
</api:info>
フルテキスト検索の使用
テーブルでフルテキスト検索を有効化すると、OData からの検索の呼び出しは標準検索と同じ方法で行われます:
http://MyServer:MyPort/api.rsc/Cars?$search='Volkswagen'
このリクエストにより、次のSQL クエリがデータベースプロバイダーに渡されます:
SELECT Make, Model, Trim, Color FROM Cars WHERE SEARCH('Make,Model,Trim,Color', 'Volkswagen') IS TRUE
検索カラムの指定
デフォルトでは、API Server はテーブル内のすべての文字列カラムを使用してクエリを作成します。各カラムをそのカラム定義で検索可能に設定することで、検索するフィールドを制限できます。ただし、MongoDB などの一部のデータベースでは、検索カラムはサーバー側で事前定義されています。この場合、手動で検索カラムを指定しても、検索から返される結果には影響しない場合があります。
複数の検索ワードの指定
フルテキスト検索では、検索パラメータ全体が検索クエリに渡されます。AND やOR などの論理演算子は、基底のデータソースで処理されます。スペースを含む用語を検索するには、必ず二重引用符を使用してください。
例えば、次のOData 呼び出しでは:
http://MyServer:MyPort/api.rsc/Cars?$search="Golf GTI" OR A4
次のクエリがデータベースプロバイダーに渡されます:
SELECT Make, Model, Trim, Color FROM Cars WHERE SEARCH('Make,Model,Trim,Color', '"Golf GTI" or A4') IS TRUE