繁体   English   中英

Azure搜索服务删除索引

[英]Azure Search Service Deleting an Index

我是Azure Search Service的新手,并且会跟随我在网上找到的指南。 在这些指南之一中,他们具有这样的方法:

static void Main(string[] args)
{
    IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
    IConfigurationRoot configuration = builder.Build();

    SearchServiceClient serviceClient = CreateSearchServiceClient(configuration);
    var test = serviceClient.Indexes.GetClient("testindex");

    Console.WriteLine("{0}", "Deleting index...\n");
    DeleteHotelsIndexIfExists(serviceClient);

    Console.WriteLine("{0}", "Creating index...\n");
    CreateHotelsIndex(serviceClient);

    ISearchIndexClient indexClient = serviceClient.Indexes.GetClient("hotels");

    Console.WriteLine("{0}", "Uploading documents...\n");
    UploadDocuments(indexClient);

    ISearchIndexClient indexClientForQueries = CreateSearchIndexClient(configuration);

    RunQueries(indexClientForQueries);

    Console.WriteLine("{0}", "Complete.  Press any key to end application...\n");
    Console.ReadKey();
}

因此,上面的想法是删除索引(如果存在),然后创建一个新索引。 然后生成并上载文档,然后最终运行搜索。 现在,这对我来说都是有意义的,但是困扰我的一件事是删除索引部分。 从本质上讲,对我来说,他们建议始终删除索引,然后重新创建它。 这让我很担心。

如果这是一个实时索引,那么即使我只是瞬间将其删除,这是否意味着在该索引上调用搜索的服务也会失败? 我担心的另一件事是,在大多数情况下,我的数据将保持90%相同,我将进行一些更新和更新,甚至可能删除一些记录。 但是,如果我的数据库有一百万条记录,那么删除所有记录然后重新创建它似乎是愚蠢的。

有没有更好的方法。 我有办法只更新索引中的文档而不是删除它吗?

所以我想这是一个两部分的问题。 1.如果删除索引,在建立新索引时它将停止搜索功能吗? 2.是否有比删除索引更好的方法。 如果有更新的方法,如何处理文档结构已更改的情况,例如添加了新字段。

该示例旨在演示如何通过.NET SDK调用Azure搜索。 它不应被视为最佳实践的示例。

要回答您的特定问题:

  1. 删除索引将立即导致所有针对该索引的请求失败。 您不应在生产中删除活动索引。 此外,还没有索引的备份/还原功能,因此,即使索引不是活动的,也不应删除它,除非可以从其他位置还原数据。
  2. 如果您需要更新文档而不更新索引架构,则可以通过Index API的“合并”操作来实现。 有覆盖此教程这里 如果需要添加新字段,则可以执行此操作而无需删除并重新创建索引-只需使用.NET SDK的Indexes.CreateOrUpdate方法之一即可。 默认情况下,此操作不会导致任何索引停机。 但是,如果您需要删除,重命名或更改现有字段的类型,或在字段上启用新行为(例如,使其具有可表性,可排序或是建议者的一部分),则需要创建一个新索引。 因此,建议您的应用程序在索引名称上实现一个间接层,以便您可以在需要时交换和重建索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM