Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

検索インデックスを作成します

項目一覧

  • 定義
  • 構文
  • コマンドフィールド
  • 検索インデックス定義構文
  • ベクトル検索インデックスの定義構文
  • 動作
  • アクセス制御
  • 出力
  • すべてのフィールドに検索インデックスを作成する
  • 言語アナライザによる検索インデックスの作成
  • 複数の検索インデックスの作成
  • ベクトル検索インデックスの作成
  • 詳細
createSearchIndexes

バージョン 7.0 の新機能: (6.0.7 以降でも利用可能

指定されたコレクションに 1 つ以上の Atlas Search インデックスまたはVector Search インデックスを作成します。

mongoshメソッド db.collection.createSearchIndex()createSearchIndexesデータベースコマンドを囲むラッパーを提供します。

重要

コマンド構文:

db.runCommand(
{
createSearchIndexes: "<collection name>",
indexes: [
{
name: "<index name>",
type: "<search index type>",
definition: {
/* search index definition fields */
}
},
...
]
}
)

createSearchIndexes コマンドは、次のフィールドがあります。

フィールド
タイプ
必要性
説明
createSearchIndexes
string
必須
検索インデックスを作成するコレクションの名前。
indexes
配列
必須
作成するインデックスを説明するドキュメントの配列。
indexes.name
string
任意

作成する検索インデックスの名前。

単一のコレクションに同じ名前で複数のインデックスを作成することはできません。

nameを指定しない場合、インデックスの名前はdefaultになります。

indexes.type
string
任意

Type of search index to create. 次のいずれかを指定できます。

  • search

  • vectorSearch

typeフィールドを省略した場合、インデックス タイプはsearchです。

indexes.definition
ドキュメント
必須

作成するインデックスを説明するドキュメント。 definitionの構文は、標準検索インデックスを作成するか、ベクトル検索インデックスを作成するかによって異なります。 definitionの構文については、以下を参照してください。

検索インデックスの定義には、次のフィールドがあります。

{
analyzer: "<analyzer-for-index>",
searchAnalyzer: "<analyzer-for-query>",
mappings: {
dynamic: <boolean>,
fields: { <field-definition> }
},
analyzers: [ <custom-analyzer> ],
storedSource: <boolean> | {
<stored-source-definition>
},
synonyms: [ {
name: "<synonym-mapping-name>",
source: {
collection: "<source-collection-name>"
},
analyzer: "<synonym-mapping-analyzer>"
} ]
}
フィールド
タイプ
必要性
説明
analyzer
string
任意

インデックス作成時に string フィールドに適用するアナライザを指定します。

このフィールドを省略すると、インデックスは標準 アナライザを使用します。

searchAnalyzer
string
任意

テキストが検索される前にクエリ テキストに適用するアナライザを指定します。

このフィールドを省略すると、インデックスはanalyzerフィールドに指定されているのと同じアナライザを使用します。

searchAnalyzerフィールドとanalyzer フィールドの両方を省略すると、インデックスは 標準 アナライザを使用します。

mappings
オブジェクト
必須
このインデックスの異なるパスにあるフィールドのインデックス方法を指定します。
mappings.dynamic
ブール値
任意

このインデックスの 動的フィールドマッピング を有効または無効にします。

trueに設定されている場合、インデックスにはサポートされているデータ型を含むすべてのフィールドが含まれます。

falseに設定されている場合は、 mappings.fieldsを使用してインデックスを作成するフィールドを個別に指定する必要があります。

省略した場合、デフォルトは false になります。

mappings.fields
ドキュメント
条件付き

動的マッピングが無効になっている場合にのみ必要です。

インデックスを作成するフィールドを指定します。 詳しくは「フィールドマッピングの定義 」を参照してください。

analyzers
配列
任意
このインデックスで使用するカスタム アナライザを指定します。
storedSource
ブール値または保存されたソース定義
任意

返された StoredSource オプションを使用して実行されるクエリに保存するドキュメント フィールドを指定します。

Atlas Search ではすべてのデータ型のフィールドを保存できます。 storedSourceの値は次のいずれかになります。

  • true: すべてのフィールドを保存

  • false、フィールドを保存しない場合

  • ストレージからincludeまたはexcludeにフィールドを指定するオブジェクト

省略した場合、デフォルトは false になります。

詳しくは、 「 Atlas Search インデックスに保存されたソース フィールドの定義 」を参照してください。

synonyms
任意

インデックスで使用する シノニム マッピング を指定します。 シノニム(同意語) を設定すると、同じ意味または似た意味を持つ単語をインデックスして検索できます。

詳しくは、 「 Atlas Search インデックスでのシノニム マッピングの定義 」を参照してください。

ベクトル検索のインデックス定義には次のフィールドが含まれます。

{
"fields": [
{
"type": "vector" | "filter",
"path": "<field-to-index>",
"numDimensions": <number-of-dimensions>,
"similarity": "euclidean" | "cosine" | "dotProduct"
}
]
}

ベクトル検索のインデックス定義フィールドの説明については、「 ベクトル検索のフィールドにインデックスを作成する方法 」を参照してください。

createSearchIndexesコマンドはインデックスビルドをトリガーします。 コマンドからの応答を受け取ってから、インデックスが準備完了するまでの間に遅延が発生する可能性があります。

検索インデックスのステータスを確認するには、 $listSearchIndexes集計ステージを使用します。

配置でアクセス制御が強制される場合、 createSearchIndexesコマンドを実行するユーザーは、データベースまたはコレクションに対するcreateSearchIndexes特権アクションを持っている必要があります。

{
resource: {
db : <database>,
collection: <collection>
},
actions: [ "createSearchIndexes" ]
}

組み込みのreadWriteロールにはcreateSearchIndexes特権が付与されます。 次の例では、 productsデータベースでaccountUser01readWriteロールを付与しています。

db.grantRolesToUser(
"accountUser01",
[ { role: "readWrite", db: "products" } ]
)

createSearchIndexesコマンドの出力は次のようになります。

{
ok: 1,
indexesCreated: [
{
id: "<index Id>",
name: "<index name>"
}
]
}

重要

応答フィールドok: 1は、コマンドが成功したことを示します。 ただし、応答を受け取ってから作成されたインデックスが使用可能になるまでの間にタイムラグが生じる可能性があります。

検索インデックスのステータスを確認するには、 $listSearchIndexes集計ステージを使用します。

次の例では、 contactsコレクションにsearchIndex01という名前の検索インデックスを作成します。

db.runCommand( {
createSearchIndexes: "contacts",
indexes: [
{
name: "searchIndex01",
definition: { mappings: { dynamic: true } }
}
]
} )

インデックス定義でmappings: { dynamic: true }が指定されています。つまり、インデックスには コレクション内のデータ型をサポートしているすべてのフィールドが含まれています。

言語アナライザは、インデックスを作成するのに十分な重要ではない単語であるストップワードを導入します。

次の例では、 carsコレクションにfrenchIndex01という名前の検索インデックスを作成し、 frフィールドにlucene.frenchアナライザを指定します。

db.runCommand( {
createSearchIndexes: "cars",
indexes: [
{
name: "frenchIndex01",
definition: {
mappings: {
fields: {
subject: {
fields: {
fr: {
analyzer: "lucene.french",
type: "string"
}
},
type: "document"
}
}
}
}
}
]
} )

言語アナライザの詳細については、「言語アナライザ 」を参照してください。

次のコマンドは、 productsコレクションに 2 つの検索インデックス( searchIndex02searchIndex03を作成します。

db.runCommand( {
createSearchIndexes: "products",
indexes: [
{
name: "searchIndex02",
definition: {
mappings: {
fields: {
title: {
type: "string",
analyzer: "lucene.simple"
}
}
}
}
},
{
name: "searchIndex03",
definition:
{
mappings: { dynamic: true }
}
}
]
} )

searchIndex02 は、 titleフィールドで単純なアナライザを使用します。 単純なアナライザは、空白、句読点、数字など、文字以外の文字に基づいてテキストを検索可能なタームに分割します。

searchIndex03 は 動的フィールドマッピング を使用するため、インデックスにはコレクション内のデータ型をサポートしたすべてのフィールドが含まれています。

次の例では、 moviesコレクションにvectorSearchIndex01という名前のベクトル検索インデックスを作成します。

db.runCommand( {
createSearchIndexes: "movies",
indexes: [
{
name: "vectorSearchIndex01",
type: "vectorSearch",
definition: {
fields: [
{
type: "vector",
numDimensions: 1,
path: "genre",
similarity: "cosine"
}
]
}
}
]
} )

ベクトル検索インデックスには 1 つの次元が含まれており、 genreフィールドにインデックスが作成されます。

戻る

Atlas Search