検索
Version 22.0.8500
検索
Version 22.0.8500
CData API Server はOData $search 関数をサポートしています。標準の検索に加え、MySQL、SQL Server、およびMongoDB はフルテキスト検索機能をサポートしています。
http://MyServer:MyPort/api.rsc/Cars?$search='Peugeot'
標準検索
標準検索、または単に_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"
論理演算子の使用
CData 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 |
複数の検索式を持つ論理演算子は、かっこを使用して組み合わせて順序付けることができます。OData 標準に従って、引用符で囲まれていないスペースで区切られた2つの検索語を指定することは、AND 演算子を使用することと同等になります。
フルテキスト検索
フルテキスト検索は、文字列値に一致するレコードを見つけるためのより強力な方法です。この方法では、インデックスを使用して、大規模な検索プールでより効率的に関連する結果を見つけることができます。データベース側でもフルテキスト検索を有効にする必要があります。方法については、データベースのドキュメントを参照してください。フルテキスト検索の設定によって、返される結果に影響がある可能性があることに注意してください。フルテキスト検索は、現在SQL Server、MySQL、およびMongoDB でサポートされています。
フルテキスト検索の有効化
リソースでフルテキスト検索を有効にするには、API Server にインポートするときに[リソースエディタ]内のボックスにチェックを付けてください。あるいは、リソーススキーマの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
検索カラムの指定
デフォルトでは、CData 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