集合上的 Azure 搜索筛选器

Azure Search filter on collections

我们的索引看起来像(这是来自查询浏览器):

  "value": [
        {
            "@search.score": 1.5390168,
            "key": "xxx",
            "content": null,
            "fileSize": null,
            "filenames": [
                "File 1.docx",
                "File 1.docx",
                "File 1.docx",
            ],
            "paths": [
                "\\Server\Share\FolderA",
                "\\Server\Share\FolderB",
                "\\Server\Share\FolderC",
            ]
        },

这表明 File 1.doc 存在不止一次,但我们将它存储在 azure blob storange 中一次,这就是为什么我们有一个密钥,xxx 是 blob 存储密钥。

我一直在阅读文档 OData Expression Syntax for Azure Search,但我没有看到允许我们使用 startswith 或集合中的 contains 进行过滤的示例。

我试过了

var searchParameters = new SearchParameters()
{
    Filter = @"paths/any(t: t gt '\Server\Share')", 
};

我们需要能够搜索给定路径的文件内容。

编辑

我们的 CosmosDb 数据库具有向用户表示的数据视图,该数据库具有 links 到 blob,因此另一个选项是索引 CosmosDb 并让索引器跟随 blob 的链接,但文档并未表明这是可能的。或者,我们最好编写自己的 indexer 并将其托管为 azure function

我们每个文档有一行和一个指向 blob 的指针,许多文档行可以指向同一个 blob。

我已经用

解决了这个问题
var searchParameters = new SearchParameters()
{
    Filter = @"search.ismatch('""\\server\share\path""','paths','simple','all')",
};

我会做更多测试并在需要时更新此答案