查看 Atlas Search 索引
您可以在 Index Overview页面查看 Atlas Search 搜索索引定义。对于每个索引, Index Overview页面显示以下内容:
本页介绍如何在Index Overview页面中查看索引定义。 您还可以在 页面中使用可视化编辑器或 JSON 编辑器 编辑 Atlas Search IndexIndex Overview 。
必需的访问权限
下表列出了每个角色支持的访问模式。
角色 | 操作 | Atlas UI | Atlas API | Atlas Search API | Atlas CLI |
---|---|---|---|---|---|
Project Data Access Read Only 或更高级别的角色 | 用于查看 Atlas Search 分析器和索引。 | ✓ | ✓ | ||
Project Data Access Admin 或更高级别的角色 | 创建和管理 Atlas Search 分析器和索引,并将角色分配给 API 密钥。 | ✓ | ✓ | ✓ | ✓ |
✓ | ✓ | ||||
为 API 密钥创建访问列表条目,并从 API 密钥访问列表中显示的客户端发送请求。 | ✓ | ✓ | |||
使用 Atlas 用户界面或 API 创建、查看、编辑和删除 Atlas Search 索引。 | ✓ | ✓ | ✓ |
步骤
您可以在 Atlas 用户界面中检索 Atlas Search 索引,也可以使用您首选语言的mongosh
、Atlas CLI、 API或支持的MongoDB 驱动程序以编程方式检索。
注意
您可以使用mongosh
命令或驾驶员辅助方法检索所有Atlas 集群层上的Atlas Search索引。
您必须至少拥有对包含索引的数据库的 readAnyDatabase
角色或 read
访问权限。如需了解更多信息,请参阅内置角色或特定权限。
➤ 使用选择语言下拉菜单设置本节中示例的语言。
要通过API检索 Atlas Search 索引,请执行以下操作:
发送GET
请求。
使用您要检索的 Atlas Search 索引的唯一 ID 或名称向search/indexes/
端点发送GET
请求。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId}"
要了解有关任一端点的语法和参数的更多信息,请参阅按名称获取和按 ID 获取。
要检索集合的所有 Atlas Search 索引,请执行以下操作:
发送GET
请求。
使用要检索其索引的集合的名称向search/indexes/
端点发送GET
请求。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}"
要检索集群的所有 Atlas Search 索引,请执行以下操作:
发送GET
请求。
使用要检索其索引的集群的名称向search/indexes/
端点发送GET
请求。
curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \ --header "Accept: application/json" \ --include \ --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes"
检索云部署的 Atlas Search 索引
要使用 Atlas CLI 列出集群的所有搜索索引,请运行以下命令:
atlas clusters search indexes list [options]
要使用 Atlas CLI 返回指定搜索索引的详细信息,请运行以下命令:
atlas clusters search indexes describe <indexId> [options]
要了解有关上述命令的语法和参数的更多信息,请参阅Atlas CLI Atlas集群Atlas Search 索引列表 和Atlas 集群Atlas Search 索引描述 的 文档。
检索本地部署的 Atlas Search 索引
要使用 Atlas CLI 描述指定部署的指定搜索索引,请运行以下命令:
atlas deployments search indexes describe [indexId] [options]
要使用 Atlas CLI 列出指定部署的所有搜索索引,请运行以下命令:
atlas deployments search indexes list [options]
要了解有关上述命令的语法和参数的更多信息,请参阅 Atlas deployments searchindexes describe和atlas deploymentssearchindexeslist 的 Atlas CLI 文档。
在 AtlasClusters 中,转到项目的 页面。
如果尚未显示,请选择包含所需项目的组织导航栏中的Organizations菜单。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果 Clusters(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。
此时会显示“集群”页面。
转到集群的 Atlas Search 页面。
您可以从侧边栏、 Data Explorer或集群详细信息页面转到 Atlas Search 页面。
在侧边栏中,单击Services标题下的Atlas Search 。
从Select data source下拉列表中,选择您的集群并单击Go to Atlas Search 。
显示Atlas Search页面。
单击集群的对应 Browse Collections 按钮。
展开数据库并选择集合。
单击集合的Search Indexes标签页。
显示Atlas Search页面。
单击集群名称。
单击 Atlas Search 标签页。
显示Atlas Search页面。
要通过mongosh
检索 Atlas Search 索引,请使用db.collection.getSearchIndexes()
方法。
该命令采用以下语法。如果省略索引名称,Atlas Search 将返回集合上的所有索引。
db.<collection>.getSearchIndexes("<index-name>")
例子
以下命令从movies
集合中检索名为default
的搜索索引。结果应类似于示例输出:
db.movies.getSearchIndexes("default")
[ { id: '648b4ad4d697b73bf9d2e5e0', name: 'default', status: 'READY', queryable: true, latestDefinition: { mappings: { dynamic: true } } } ]
要使用C 驱动程序检索 Atlas Search 索引,请使用mongoc_collection_aggregate()
方法创建包含$listSearchIndexes
阶段的聚合管道。
例子
将以下代码示例复制到该文件中。
以下示例应用程序指定聚合管道中的$listSearchIndexes
阶段。然后,应用程序将管道和目标集合传递给mongoc_collection_aggregate()
方法。此方法返回一个游标,代码通过该游标访问并打印每个 Atlas Search 索引:
int main (void) { mongoc_client_t *client = NULL; mongoc_collection_t *collection = NULL; mongoc_database_t *database = NULL; bson_error_t error; bson_t cmd = BSON_INITIALIZER; bool ok = true; bson_t pipeline = BSON_INITIALIZER; mongoc_cursor_t *cursor = NULL; mongoc_init(); // Connect to your Atlas deployment client = mongoc_client_new("<connectionString>"); if (!client) { fprintf(stderr, "Failed to create a MongoDB client.\n"); ok = false; goto cleanup; } // Access your database and collection database = mongoc_client_get_database(client, "<databaseName>"); collection = mongoc_database_get_collection(database, "<collectionName>"); // Create an aggregation pipeline with the $listSearchIndexes stage const char *pipeline_str = BSON_STR ({"pipeline" : [ {"$listSearchIndexes" : {}} ]}); // Convert your aggregation pipeline to BSON if (!bson_init_from_json(&pipeline, pipeline_str, -1, &error)) { fprintf(stderr, "Failed to parse command: %s\n", error.message); ok = false; goto cleanup; } // Run the aggregation operation and iterate through the indexes returned cursor = mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL); const bson_t *got; char *str; while (mongoc_cursor_next (cursor, &got)) { str = bson_as_canonical_extended_json (got, NULL); printf ("%s\n", str); bson_free (str); } if (mongoc_cursor_error (cursor, &error)) { fprintf (stderr, "Failed to iterate all documents: %s\n", error.message); ok = false; goto cleanup; } cleanup: mongoc_cursor_destroy(cursor); mongoc_collection_destroy(collection); mongoc_database_destroy(database); mongoc_client_destroy(client); bson_destroy(&pipeline); bson_destroy(&cmd); mongoc_cleanup (); return ok ? EXIT_SUCCESS : EXIT_FAILURE; }
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要检索其索引的数据库和集合。
要使用C++ 驱动程序检索 Atlas Search 索引,请在搜索索引视图上调用list()
方法。
例子
将以下代码示例复制到该文件中。
以下示例应用程序在目标集合上使用search_indexes()
方法来实例化搜索索引视图。然后,应用程序调用视图上的list()
方法。此方法返回一个游标,代码通过该游标访问并打印每个 Atlas Search 索引。
using namespace mongocxx; int main() { mongocxx::instance instance{}; try { // Connect to your Atlas deployment mongocxx::uri uri("<connectionString>"); mongocxx::client client(uri); // Access your database and collection auto db = client["<databaseName>"]; auto collection = db["<collectionName>"]; // Access and print the indexes in your collection auto siv = collection.search_indexes(); auto cursor = siv.list(); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }; } catch (const std::exception& e) { std::cout<< "Exception: " << e.what() << std::endl; } return 0; }
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要检索其索引的数据库和集合。
要使用.NET/C# 驱动程序检索 Atlas Search 索引,请使用List()
或ListAsync()
方法。
例子
以下示例应用程序返回集合上的索引。指定以下值:
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
包含要检索的搜索索引的数据库和集合。
注意
List()
方法返回游标而不是索引本身。要访问索引,请使用游标范例,例如MoveNext()
方法。
using MongoDB.Bson; using MongoDB.Driver; // connect to your Atlas deployment var uri = "<connection-string>"; var client = new MongoClient(uri); var db = client.GetDatabase("<databaseName>"); var collection = db.GetCollection<BsonDocument>("<collectionName"); // list your Atlas Search indexes var result = collection.SearchIndexes.List().ToList(); foreach (var index in result) { Console.WriteLine(index); }
若要运行示例应用程序,请创建一个名为 csharp-list-indexes
的新 .NET 控制台项目,并将上一个代码示例复制到 Program.cs
文件中。然后,使用以下命令运行项目:
dotnet run csharp-list-indexes.csproj
<indexes for this collection>
要使用Java 驱动程序检索集合上的 Atlas Search 索引,请使用listSearchIndexes()
方法。您必须有Java 驱动程序v 4 。 11 。 0或更高版本。
将以下代码示例复制到该文件中。
以下示例应用程序检索给定集合上的所有 Atlas Search 索引。
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoCursor; 5 import com.mongodb.client.MongoDatabase; 6 import org.bson.Document; 7 public class ViewIndex { 8 public static void main(String[] args) { 9 // connect to your Atlas cluster 10 String uri = "<connection-string>"; 11 try (MongoClient mongoClient = MongoClients.create(uri)) { 12 // set namespace 13 MongoDatabase database = mongoClient.getDatabase("<database-name>"); 14 MongoCollection<Document> collection = database.getCollection("<collection-name>"); 15 // retrieve indexes 16 try (MongoCursor<Document> resultsCursor = collection.listSearchIndexes().iterator()) { 17 while (resultsCursor.hasNext()) { 18 System.out.println(resultsCursor.next()); 19 } 20 } 21 } 22 } 23 }
替换以下值,然后保存文件。
<connection-string>
- 您的 Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。<database-name>
— 包含该集合的数据库的名称。<collection-name>
— 要检索其索引的集合的名称。
要通过节点驱动程序检索 Atlas Search 索引,请使用listSearchIndexes
辅助方法。
例子
您可以使用以下名为list-indexes.js
的示例应用程序来返回集合上的索引。指定以下值:
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
包含要检索的搜索索引的数据库和集合。
如果要检索特定索引,则为索引名称。 要返回集合上的所有索引,请省略此值。
注意
listSearchIndexes
命令会返回一个游标。 因此,它不会立即返回与该命令匹配的索引。 要访问结果,请使用游标范例,例如toArray()
方法。 要了解详情,请参阅从游标访问数据。
import { MongoClient } from "mongodb"; // connect to your Atlas deployment const uri = "<connection-string>"; const client = new MongoClient(uri); async function run() { try { const database = client.db("<databaseName>"); const collection = database.collection("<collectionName>"); // run the helper method const result = await collection.listSearchIndexes("<index-name>").toArray(); console.log(result); } finally { await client.close(); } } run().catch(console.dir);
要运行样本应用程序,请使用以下命令。 结果应类似于示例输出:
node list-indexes.js
[ { id: '648b4ad4d697b73bf9d2e5e0', name: 'default', status: 'READY', queryable: true, latestDefinition: { mappings: { dynamic: true } } }, { id: '648b4ad4d697b73bf9d2e5e1', name: 'example-index', status: 'PENDING', queryable: false, latestDefinition: { mappings: { dynamic: false, fields: { text: { type: 'string' } } } } } ]
要使用Python 驱动程序检索 Atlas Search 索引,请对集合调用list_search_indexes()
方法。
例子
将以下代码示例复制到该文件中。
以下示例应用程序对集合调用list_search_indexes()
方法。此方法返回一个游标,代码通过该游标访问并打印每个 Atlas Search 索引:
from pymongo.mongo_client import MongoClient def view_index(): # Connect to your Atlas deployment uri = "<connectionString>" client = MongoClient(uri) # Access your database and collection database = client["<databaseName>"] collection = database["<collectionName>"] # Get a list of the collection's search indexes and print them cursor = collection.list_search_indexes() for index in cursor: print(index)
指定以下值并保存文件。
Atlas 连接字符串。要了解更多信息,请参阅通过驱动程序连接。
要检索其索引的数据库和集合。
在Atlas用户界面中, Atlas Search页面显示有关集合的Atlas Search索引的信息。该页面显示集群上每个索引的以下详细信息。
列 | 说明 |
---|---|
Database | 包含该集合的数据库的名称。 |
Collection | 索引集合的名称。 |
Index Name | 索引名称。 |
Type | 索引类型。值可以是以下类型的索引之一:
|
Index Fields | |
Status | 索引的状态。要学习;了解更多信息,请参阅Atlas Search索引状态。 |
Queryable | 图标,用于标识集合是否可使用索引进行查询。值可以是以下图标之一:
|
Size | 索引的大小。 |
Documents | 在集群的主节点 (primary node in the replica set)节点或搜索节点上构建索引期间和之后,已建立索引的文档在集合中文档总数中所占的大致数量和百分比。 |
Actions |
您可以按各个列对索引进行排序。默认, Atlas首先按数据库名称,然后按集合名称对索引进行排序。要按多列排序,请按 Shift
,然后按照要对索引列表进行多重排序的顺序单击列名称。当您离开页面时, Atlas不会保存您的首选排序顺序。
查看索引状态
对于每个索引, Status列显示集群主节点 (primary node in the replica set)节点上索引的当前状态。下表描述了索引状态。
状态 | 说明 |
---|---|
待处理 | Atlas 尚未开始构建索引。 |
构建 | Atlas 正在构建索引或在编辑后重新构建索引。当该索引处于以下状态时:
|
准备就绪 | 索引已准备就绪。 |
Stale | 复制遇到错误。当当前复制点在 mongod oplog上不再可用时,通常会出现此状态。您仍然可以查询现有索引,直到它更新并且其状态变为Active 。使用View status
details模式窗口中的错误来解决问题。要学习;了解更多信息,请参阅修复Atlas Search问题。 |
已失败 | Atlas 无法构建索引。使用 View status details(查看状态详细信息)模式窗口中的错误来解决问题。要了解更多信息,请参阅修复 Atlas Search 问题。 |
删除 | Atlas 正在从集群节点中删除索引。 |
不存在 | 索引无效,因为索引的集合不再存在。您无法对此索引运行查询,因为该索引没有相应的集合。 Atlas最终会删除该索引。 |
查看状态详细信息
Status列显示集群主节点 (primary node in the replica set)节点上索引的当前状态。您可以通过以下方式之一查看详细状态:
单击Status列中状态下方的View status details链接。
单击索引的名称,然后从索引左侧的菜单中选择Status Details 。
在此页面,您可以查看有关索引的以下详细信息:
索引服务查询
此部分显示提供服务查询的索引。如果该集合只有一个具有此名称的索引版本,则该部分包含指向Index Overview的链接,您可以在其中查看正在使用的索引的索引定义。
如果集合上有其他同名的索引,则该部分将显示最新的索引定义,并显示您可以在不同标签页中复制的索引的先前有效版本。
更新索引时,不同节点以不同速度应用更新。因此,某些节点可能会使用最新版本,而某些节点可能会使用先前版本。 Atlas会显示两个版本的索引,直到更改应用到所有节点。
如果您尝试使用无效的索引定义更新索引,则索引构建将失败,并且Atlas仅显示以前的有效索引定义。
按节点划分的状态详细信息
此部分显示集群每个节点上的索引状态。您可以查看每个节点上索引的以下详细信息:
Shard | 分片名称。 |
Node | 节点信息。 |
Status | 分分片节点上的索引状态。 |
Queryable | 指示索引能否提供服务查询提供服务的图标。 |
Message | 索引状态的原因。对于处于 Stale 或Failed 状态的索引,显示索引过时或索引构建失败的原因。 |
Node Type | 节点类型。值可以是以下类型之一:
|
Region | 节点地区。 |
Size | 节点上索引的大小。 |
Documents | 已建立索引的文档的数量和百分比。 |
Actions | 您可以对节点中的索引执行的操作。您可以单击并选择以下选项之一:
|
警告
如果您对已具有 Atlas Search 索引的集合进行分片,当该集合开始出现在分片上时,您可能会遇到短暂的查询停机时间。此外,如果您为包含 Atlas Search 索引的已分片集合添加分片,针对该集合的搜索查询将失败,直到添加的分片完成初始同步过程为止。要了解更多信息,请参阅初始同步进程。
迁移到搜索节点
本部分显示正在进行的Atlas Search和Atlas Vector Search索引到搜索节点的迁移状态(如果适用)。仅当您当前正在迁移到搜索节点时才可见。
单击Index Status by Search Node部分下信息横幅中的View Migration Progress链接,详细了解索引到搜索节点(基于每个节点)的迁移进度。
Atlas用户界面显示集群上每个索引的以下列。
列 | 说明 |
---|---|
Database | 包含该集合的数据库的名称。 |
Collection | 索引集合的名称。 |
Index Name | 索引名称。 |
Index Fields | |
Type | 索引类型。值可以是以下类型的索引之一:
|
Status | 迁移状态。要学习;了解更多信息,请参阅迁移到搜索节点。 |
Size | 索引的大小。 |
Documents | 迁移期间和之后,集群搜索节点上已建立索引的文档在集合中文档总数中所占的比例。 |
状态列显示搜索节点上索引的状态。状态可以是以下状态之一:
状态 | 说明 |
---|---|
构建 | 当前正在搜索节点上构建索引。在构建新索引时,您的查询可以继续使用现有索引。 |
On Deck | 已在搜索节点上成功构建索引,但迁移尚未完成。请注意,仅当Atlas成功在搜索节点上构建所有索引时,迁移才完成。 |
准备就绪 | 搜索节点上的索引已准备好用于查询。仅当Atlas成功完成到搜索节点的迁移时才会显示。 |
已失败 | 索引构建失败,向单独搜索节点的迁移停止。您的查询可以继续使用现有索引。 Atlas将尝试重建索引,但会在7天后超时。 要成功迁移,请在“状态详细信息(按节点)” Message列或索引的Status Details页面中查看索引的错误消息,并解决导致在搜索节点上构建索引失败的问题。 |
您的查询可以继续使用现有索引,同时在搜索节点上构建新索引。仅当Atlas成功在搜索节点上构建所有索引时,才能完成向搜索节点的迁移。然后,您的查询将自动路由到使用搜索节点上的索引。