AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

createSearchIndexes(データベースコマンド)

createSearchIndexes

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

指定されたコレクションまたはビューに 1 つ以上のMongoDB 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

ブール値

任意

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

If set to true, the index contains all fields containing supported data types.

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

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

mappings.fields

ドキュメント

条件付き

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

Specifies the fields to index. To learn more, see Define Field Mappings for a MongoDB Search Index.

analyzers

配列

任意

このインデックスで使用するカスタム アナライザを指定します。

storedSource

ブール値または保存されたソース定義

任意

Specifies document fields to store for queries performed using the returnedStoredSource option.

You can store fields of all MongoDB Search Field Types on MongoDB Search. The storedSource value can be one of these:

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

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

  • An object that specifies the fields to include or exclude from storage

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

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

synonyms

任意

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

詳しくは、「 MongoDB 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データベースでaccountUser01にreadWriteロールを付与しています。

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 } }
}
]
} )

The index definition specifies mappings: { dynamic: true }, which means that the index contains all fields in the collection that have supported data types.

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

次の例では、 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 つの検索インデックス( searchIndex02とsearchIndex03を作成します。

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

searchIndex02 uses a simple analyzer on the title field. The simple analyzer divides text into searchable terms based on non-letter characters, such as whitespace, punctuation, or digits.

searchIndex03 uses a dynamic field mapping, meaning the index contains all fields in the collection that have supported data types.

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

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

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