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