【问题标题】:Azure Search Service comparing documents to be uploaded and deletingAzure 搜索服务比较要上传和删除的文档
【发布时间】:2020-11-21 04:40:37
【问题描述】:

我对 Azure 搜索服务非常陌生。对于我正在处理的当前项目,我将大量文档上传到 Azure 搜索索引。我们将使用 Azure 搜索认知 API(此处的文档 https://docs.microsoft.com/en-us/rest/api/searchservice/addupdate-or-delete-documents)使用 mergeOrUpload 操作上传和添加新文档。只要我们添加尚不存在的新数据,这种方法就很好。

我一直在尝试找出是否有办法将索引中的文档与我将要上传的文档进行比较,看看是否有任何数据需要删除。 IE。我要上传的内容包含一些不应再出现在索引中的文件,我只想删除那些特定的文件。我看不出任何uploadmerge 等操作都会在这里有所帮助。有一个delete 操作,但这会删除一个指定的文档,并且依赖于我确切知道需要删除哪个文档,而如果可能的话,我更喜欢一种比较方式来消除对任何手动干预的需要。有谁知道处理这个问题的方法吗?

【问题讨论】:

    标签: c# azure azure-cognitive-search


    【解决方案1】:

    您需要为您的索引/文档定义一个唯一的 ID。使用 mergeOrUpload,Azure 认知搜索将检查是否存在具有您尝试插入的 ID 的文档。如果是,它将比较内容并执行更改(如果需要),如果文档 id 不匹配,它将插入它。

    【讨论】:

    • 谢谢@ThiagoCustodio - 这是有道理的,但我想知道是否有办法将我上传的数据与搜索索引中已有的数据进行比较。如果要上传的新数据不包含搜索索引中的文档,有没有办法从搜索索引中删除该文档?
    • 你可以,但这不是有效的。想象一下,如果你有 1MM 的文件。您会将当前文档与索引中的所有文档进行比较,还是检查 ID 为 1000001 的文档是否存在? O(N) 与 O(1)
    • 是的,我想将它们与索引中已经存在的文档进行比较,这样我就可以确保索引中应该作为更新的一部分删除的文档将被删除。
    • 只需将 search=* 与 $skip 和 $top 一起使用,直到最后,对于每一页,请检查您的数据源。但同样,这是无效的
    【解决方案2】:

    直接使用 API 推送您在此处描述的内容与定义数据源之间存在差异。

    如果您希望为您处理删除,您可以将您的内容上传到 Azure Blob 存储或开箱即用支持的某些其他类型的内容源。在这种情况下,您定义一个数据源并将其连接到您的存储。在添加、更改和删除内容时,必要的更改会反映在 Azure 搜索中。有关分步示例,请参阅文章 Import data wizard for Azure Cognitive Search

    使用 API 时,您有责任跟踪文档的状态。添加、更改或删除内容时,必须执行必要的操作以在索引中反映这些内容。

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2023-01-05
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2016-07-01
      • 2019-07-16
      • 2017-08-09
      相关资源
      最近更新 更多