Azure 搜索、映射、合并集合

Azure Search, mapping, merge collections

我有以下数据:

来自 SELECT c.addresses[0] address, [ c.name ] filenames FROM c

[
  {
    "address": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "filenames": [
      "File 01.docx"
    ]
  },
  {
    "address": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "filenames": [
      "File 02.docx"
    ]
  },
  {
    "address": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "filenames": [
      "File 03.docx"
    ]
  }, ....

address 字段是键,我有一个索引,其字段定义如下:

new Field()
{
    Name = "filenames",
    Type = DataType.Collection(DataType.String),
    IsSearchable = true,
    IsFilterable = true,
    IsSortable = false,
    IsFacetable = false
},

如您所见,我使用 [ c.name ] filenames.

为文件名创建了一个数组

当我索引上面显示的数据时,索引包含文件名集合中的一行,该行是最后一个被索引的行。我可以将它添加到集合(合并)而不是替换吗?

我也在考虑使用查询来解决这个问题,但是 CosmosDB 不支持子选择(目前)并且 UDF 只能看到传递给它的数据。

从根本上说,您构建 Cosmos DB 集合的方式使这种情况不可行,因为 Azure 搜索不支持合并到集合中。

考虑将您的设计更改为 address 是集合中的一个键(即唯一的),并且所有 filenames 都收集在每个 address 的单个文档中:

  {
    "address": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "filenames": [ "File 01.docx", "File 02.docx", "File 03.docx", ... ]
  }

此外,请在 Azure Search UserVoice site 上添加对合并集合的支持的建议,这将使您的方案更容易实现。