Azure 认知搜索忽略字段

Azure Cognitive Search Ignore fields

有没有办法忽略索引中不存在或索引器中没有字段映射的任何字段?或者在 Indexer 或 Import 上指定忽略特定字段的方法?

我正在创建数据源为 CosmosDB 的 Azure 搜索索引。由于 CosmosDB 具有灵活的架构,我可能会定期添加新字段。我希望这些不被索引,它仍然是原始模式。有没有办法在索引或索引器上设置在向索引添加新项目时忽略新字段(甚至这个特定字段)?

我在字段映射文档中没有看到任何要忽略的字段:https://docs.microsoft.com/en-us/azure/search/search-indexer-field-mappings

解决方案取决于您使用的型号。

  1. 推送模型: 您通过 Azure 搜索 SDK 推送内容。在这种情况下,您可以完全控制提交搜索的对象,您的问题不是问题。如果您不想要某个字段,则不要将其包含在您提交搜索的对象中。
  2. 拉取模型: 您定义一个从您的内容源中拉取内容的索引器。在这里您可以使用输出字段映射。正如文档所说:“您应该使用输出字段映射的示例:[当您]正在从 Cosmos DB 数据库中索引复杂类型时。您想要获取该复杂类型上的一个节点并将其映射到您的字段中索引。

https://docs.microsoft.com/en-us/azure/search/cognitive-search-output-field-mapping

所以,解决办法就是不要忽略任何东西。您相当明确地映射了您想要的位。

FWIW:我遇到了类似的问题。我已经有了两个模型,即 CosmosDB 模型和 AzureSearch 模型。 问题是我需要在后者上添加一个标志,所以如果它没有被标记,则对索引执行删除操作,否则执行更新。 (在我的例子中,将标志从一个模型传递到另一个模型是最便宜的方式,否则我需要进行大的重构)。

因为我不需要 SeachModel 上的标志(要持久化),所以使用 JsonIgnore 属性对我有用。 如果您需要该值,FieldBuilderIgnore 属性可能会有所帮助,请参阅 https://docs.microsoft.com/en-us/dotnet/api/azure.search.documents.indexes.fieldbuilderignoreattribute?view=azure-dotnet.

示例:https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/search/Azure.Search.Documents/samples/Sample04_FieldBuilderIgnore.md