説明
検索エンジンのコレクションにメタデータを挿入し、それを検索するためのインデックスを作成します。このエンジン(Solr)を使用すると、様々なタイプの物理ファイルやデータベースクエリを検索できます。クエリからの結果のデータベース列にインデックスを付けると、複数の SQL クエリを使用して同じデータを返していた場合に比べてはるかに迅速にクエリデータを検索できるようになります。コレクションにインデックスを付ける前に、ColdFusion Administrator または cfcollection タグを使用してコレクションを定義する必要があります。
ColdFusion Administrator を使用して、コレクションにインデックスを付けることもできます。コレクションの作成、インデックス作成および検索について詳しくは、『ColdFusion アプリケーションの開発』の Solr 検索の例を参照してください。
カテゴリ
シンタックス
cfindex では、次のスクリプトスタイルシンタックスをサポートしています。 new index(collection="<コレクション名>"); <cfindex action = "update|delete|purge|refresh|fullimport|deltaimport|status|abort|optimize" autoCommit = "yes|no" collection = "コレクション名" collectionNames= "コレクション名のコンマ区切り値" body = "本文" category = "カテゴリ名" categoryTree = "カテゴリツリー" custom1 = "カスタム値" custom2 = "カスタム値" custom3 = "カスタム値" custom4 = "カスタム値" extensions = "ファイル拡張子" key = "ID" language = "{{言語}}" prefix = "ドキュメントの場所" query = "クエリ名" recurse = "yes|no" status = "ステータス" throwOnError="true|false" title = "タイトル" type = "タイプ" URLpath = "URL">
このタグの属性は attributeCollection 属性で指定でき、その値は構造体になります。attributeCollection 属性で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。
関連項目
履歴
ColdFusion(2016 リリース):throwOnError パラメーターが追加されました。
ColdFusion 10:
- 新しいアクション fullimport 、 deltaimport 、status、abort が追加されました。
- 新しい属性 autoCommit、 fieldBoost 、docBoost が追加されました。
- 動的カスタムフィールドのサポートが追加されました。
ColdFusion 9: Solr 検索エンジンを使用できるようになりました。
ColdFusion MX 7.0.1:prefix 属性が追加されました。
ColdFusion MX 7:
- category、 categoryTree 、custom3、custom4 の各属性が update アクションと refresh アクションに追加されました。
- update、refresh、delete、purge の各アクションに status 属性が追加されました。
- 外部コレクションへの参照が削除されました。
- 推奨の cflock の使用が削除されました。
ColdFusion MX:
- external 属性の動作が変更されました。external 属性を指定する必要はなくなりました。内部コレクションか外部コレクションかは ColdFusion が自動的に検出します。
- Verity オペレーションの動作が変更されました。ColdFusion で、Acrobat PDF ファイルに対する Verity オペレーションがサポートされるようになりました。
- 返す例外が変更されました。このタグでは SEARCHENGINE 例外を返すことができます。
- コレクションのネーミング規則が変更され、スペースを含むコレクション名が使用できるようになりました。
- クエリ結果の動作が変更されました: cfindex タグは cfsearch タグで使用)
属性
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
action |
必須 |
Null |
|
autoCommit |
オプション |
True |
yes の場合、検索サーバーに対する変更は自動的にコミットされます。 |
collection |
必須 |
Null |
ColdFusion によって登録されているコレクションの名前(例:"personnel")。 |
collectionNames | オプション | Null | コレクション名のコンマ区切り値。 メモ:action="merge" の場合、この属性は必須です。 |
body |
type=custom の場合は必須 |
Null |
|
category |
オプション |
(空の文字列) |
インデックスを付けるデータの検索カテゴリを指定する文字列です(複数指定可)。1 つのインデックスについて、複数のカテゴリをコンマで区切って定義することができます。インデックス付けされたデータにクエリを使用する場合、この値は列の名前でも構いません。 |
categoryTree |
オプション |
(空の文字列) |
検索対象の階層構造のカテゴリまたはカテゴリツリーを指定する文字列値です。スラッシュ(「/」)で区切られた一連のカテゴリです。指定できるカテゴリツリーは 1 つだけです。 |
custom1 |
オプション |
Null |
コレクションレコード内の不連続な値にインデックスを付けて、特定のレコードを検索できるようにする場合に使用します。一方、body 属性で指定した値は、連結され、指定の条件を使用してテキスト本文として検索されます。 type = custom の場合は、クエリ列名です。type が file または path の場合は、文字列です。 さらに、ColdFusion 10 では、動的カスタムフィールドのサポートが追加されました。 |
custom2 |
オプション |
Null |
使用方法は、custom1 の場合と同じです。 |
custom3 |
オプション |
Null |
使用方法は、custom1 の場合と同じです。 |
custom4 |
オプション |
Null |
使用方法は、custom1 の場合と同じです。 |
extensions |
オプション |
htm、html、cfm、cfml、dbm、dbml |
type = "Path" の場合は、ColdFusion がファイルのインデックス作成に使用するファイル拡張子をコンマ区切りで指定します。"." を入力すると、拡張子のないファイルが返されます。"*"を入力すると、すべてのファイルが返されます。 |
fieldBoost |
オプション |
htm、html、cfm、cfml、dbm、dbml |
インデックスを付ける際に特定のフィールドのランクを上げます。fieldBoost は、フィールドのスコアを上げることにより、検索結果でのランキングを上げます。複数のフィールドを増強するには、コンマ区切りリストで値を指定します。 |
key |
必須 |
(空の文字列) |
key に対して指定される値は、type 属性によって決まります。
|
language |
オプション |
Null |
オプションについては、cfcollection を参照してください。 |
prefix |
オプション |
Null |
K2 検索サービスと ColdFusion が別々のコンピュータにインストールされていて、type 属性を path に設定してファイルにインデックスを付ける場合のファイルの場所を指定します。 |
query |
オプション。 |
Null |
コレクションの生成対象となるクエリの名前です。 |
recurse |
オプション |
no |
|
status |
オプション |
Null |
ColdFusion がステータス情報を返す先の構造体の名前です。 |
throwOnError | オプション | false | true の場合、ドキュメントにインデックスを付ける際に cfindex タグでエラーが発生します。 |
title |
オプション |
(空の文字列) |
ドキュメントのタイトルをドキュメントから取得できない場合、そのタイトルを提供します。 |
type |
オプション |
query 属性を指定している場合は custom。指定していない場合は file。 |
type="dih" の場合は、次のアクションが使用されます。
|
URLpath |
オプション |
(空の文字列) |
type が file または path の場合は、URL パスを指定します。インデックスを付ける際には、このパス名がファイル名の先頭に付き、url として検索から返されます。 |
使用方法
cfindex タグに必要な属性の設定は、query 属性を設定するかどうかによって決まります。query 属性を有効なクエリ名に設定した場合は、cfindex がディスク内のドキュメントにインデックスを付けるのではなく、クエリ内のデータにインデックスを付けるように指定します。query 属性を設定しない場合、cfindex はファイル(type = file)、ディレクトリパス内のファイルのセット(type = path)または body 属性で指定されたテキスト(type = custom)にインデックスを付けると想定します。query 属性を有効なクエリ名に設定した場合、cfindex タグは、次の属性およびその値で指定されたとおりにインデックスを作成します。
タイプ |
属性値 |
---|---|
File |
key 属性は、完全ファイル名(パスを含む)を含んだクエリ内の列の名前です。 |
Path |
key 属性は、ディレクトリのパス名を含んだクエリ内の列の名前です。 |
|
extensions 属性および recurse 属性が指定されている場合、これらの属性はどのタイプのファイルが含まれているかを示します。アクションが delete の場合、cfindex はコレクションのキーを削除します。 |
Custom |
key 属性は、目的のものを含む列名を指定します。例えば、データベースのプライマリキー値などです。これはコレクションのプライマリキーであるため、固有のものでなければなりません。アクションが delete の場合、key 属性は、削除するキーを含んだクエリ内の列の名前です。 |
|
body 属性は必須で、インデックスを付けるテキストデータを含んだ列の名前のコンマ区切りリストです。 |
query 属性を設定しない場合、cfindex タグは、次の属性およびその値で指定されたとおりにインデックスを作成します。
タイプ |
属性値 |
---|---|
File |
key 属性が必須で、その値はファイルへの完全パス名です。 |
Path |
key 属性が必須で、その値はディレクトリのパス名です。 |
|
extensions 属性および recurse 属性が指定されている場合、これらの属性はどのタイプのファイルが含まれているかを示します。アクションが delete の場合、キーおよびドキュメントファイルがどちらも削除されます。 |
Custom |
key 属性は、キーを指定する任意の識別子です。アクションが delete の場合、key 属性は削除するドキュメントキーです。 |
|
body 属性が必須で、その値はインデックスを付けるテキストです。 |
type を指定しないで query を設定した場合、ColdFusion は type を custom のデフォルト値に設定します。type と query のいずれも設定しない場合、ColdFusion は type を file のデフォルト値に設定します。type が custom の場合、key および body 以外のすべての属性で、列名だけでなくリテラル値も指定することができます。これにより、コレクション内でフィールドを空に変更することができます。
status 属性
status 属性は、cfindex 操作の結果に関する次の情報と診断を提供します。
キー |
型 |
説明 |
---|---|---|
BADKEYS |
Struct |
無効なキーのインデックス作成に関する診断メッセージを含む、キーの構造体です。無効なキーがない場合、このキーは存在しません。 |
DELETED |
Number |
削除されたキーの数です。 |
MESSAGES |
Array |
診断メッセージの配列で、重大でないエラーと警告が含まれます。メッセージがない場合、このキーは存在しません。 |
INSERTED |
Number |
コレクションに挿入されたキーの数です。 |
UPDATED |
Number |
コレクションで更新されたキーの数です。 |
例
<! --- 例 1:ファイルにインデックスを付けます(type = "file")。----------------------------> <! --- 例:status 変数の内容("info")をダンプします。-------------------> <cfindex collection="CodeColl" action="refresh" type="file" key="C:\ColdFusion\wwwroot\vw_files\cfindex.htm" urlpath="http://localhost:8500/vw_files/" language="English" title="Cfindex Reference page" status="info"> <! --- 属性を検索します。 ---> <cfsearch name = "mySearch" collection = "CodeColl" criteria = "Attributes" contextpassages = "1" maxrows = "100"> <cfoutput> key=#mySearch.key#<br /> title=#mySearch.title#<br /> context=#mySearch.context#<br /> url=#mySearch.url#<br /> </cfoutput> <cfdump var="#info#"> <! --- 例 2:パスにインデックスを付けます(type = "path")。------------------------------> <cfindex collection="CodeColl" action="refresh" type="path" key="C:\inetpub\wwwroot\vw_files\newspaper\sports" urlpath="http://localhost/vw_files/newspaper/sports" extensions = ".htm, .html" recurse="no" language="English" categoryTree="vw_files/newspaper/sports" category="Giants"> <! --- 基準へのあらゆる参照を検索します。 ---> <cfsearch name = "mySearch" collection = "CodeColl" categoryTree="vw_files/newspaper/sports" category="Giants" criteria = "Williams" contextpassages = "1" maxrows = "100"> <cfoutput> key=#mySearch.key#<br /> title=#mySearch.title#<br /> context=#mySearch.context#<br /> url=#mySearch.url#<br /> </cfoutput> <! ---例 3:custom1 を使用してクエリにインデックスを付けます(type = "custom")。 ------------> <! --- テーブルからデータを取得します。---> <cfquery name="getCourses" datasource="cfdocexamples"> SELECT * FROM COURSES </cfquery> <! --- 上記のクエリ結果でコレクションを更新します。---> <! --- key は Courses テーブルの Course_ID。 ----> <!--- body では、検索用にインデックスを付ける列を指定します。---> <! --- custom1 は Course_Number 列の値を指定します。 ---> <cfindex query="getCourses" collection="CodeColl" action="Update" type="Custom" key="Course_ID" title="Courses" body="Course_ID,Descript" custom1="Course_Number" > <h2>Indexing Complete</h2> <!--- cno は custom1 を検索するための値を提供します。代わりにフォーム入力を指定することもできます。 ---> <cfset cno = "540"> <cfsearch name = "mySearch" collection = "CodeColl" criteria = "CF_CUSTOM1 <MATCHES> #cno#" contextpassages = "1" maxrows = "100"> <! --- Course_Number 540 のインデックス付き値 (Course_ID と Descript)を返します。 ---> <cfoutput> key=#mySearch.key#<br /> title=#mySearch.title#<br /> context=#mySearch.context#<br /> url=#mySearch.url#<br /> </cfoutput> <! --- 例 4:クエリ内のファイルにインデックスを付けます(type= "file")。 ---------------> <! --- ファイル名(Contract_File)を含んだ列を持つ行を取得します。 ---> <cfquery name="getEmps" datasource="cfdocexamples"> SELECT * FROM EMPLOYEE WHERE EMP_ID = 1 </cfquery> <! --- 上記のクエリ結果でコレクションを更新します。---> <! --- key は完全なファイル名を含んだ列を指定します。---> <! --- ファイルは、クエリがない場合と同じようにインデックス付けされます。 ---> <cfindex query="getEmps" collection="CodeColl" action="Update" type="file" key="Contract_File" title="Contract_File" body="Emp_ID,FirstName,LastName,Contract_File"> <h2>Indexing Complete</h2> <cfsearch name = "mySearch" collection = "CodeColl" criteria = "vacation" contextpassages = "1" maxrows = "100"> <cfoutput> key=#mySearch.key#<br /> title=#mySearch.title#<br /> context=#mySearch.context#<br /> url=#mySearch.url#<br /> </cfoutput> <! --- 例 5:クエリ内のパスにインデックスを付けます。----------------------------> <! --- パス(Project_Docs)を含んだ列を持つ行を取得します。 ---> <cfquery name="getEmps" datasource="cfdocexamples"> SELECT * FROM EMPLOYEE WHERE Emp_ID = 15 </cfquery> <! --- 上記のクエリ結果でコレクションを更新します。---> <! --- key はディレクトリパスを含んだ列を指定します。---> <! --- パスは、クエリがない場合と同じようにインデックス付けされます。---> <cfindex query="getEmps" collection="CodeColl" action="update" type="path" key="Project_Docs" title="Project_Docs" body="Emp_ID,FirstName,LastName,Project_Docs"> <h2>Indexing Complete</h2> <cfsearch name = "getEmps" collection = "CodeColl" criteria = "cfsetting" contextpassages = "1" maxrows = "100"> <cfoutput> key=#getEmps.key#<br /> title=#getEmps.title#<br /> context=#getEmps.context#<br /> url=#getEmps.url#<br /> </cfoutput> <! --- 例 6:(サブディレクトリ内ではなく)指定されたディレクトリ内の HTML ファイルの ---> <! --- CodeColl コレクション内のキーを削除します。 -------------> <cfindex collection="CodeColl" action="delete" type="path" key="C:\ColdFusion\wwwroot\vw_files\newspaper" urlpath="http://localhost:8500/vw_files/newspaper" extensions = ".htm, .html" recurse="no"> <! --- 例 7:CodeColl コレクション内のすべてのキーを再帰的に ---> <! --- 破棄します。 -------------------------------------------------------> <cfindex collection="CodeColl" action="purge" type="path" key="C:\ColdFusion\wwwroot\vw_files\newspaper">