【问题标题】:Azure Search filter on collections集合上的 Azure 搜索筛选器
【发布时间】:2018-01-10 03:09:56
【问题描述】:

我们的索引看起来像(这是来自查询资源管理器):

  "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 存储中一次,这就是为什么我们有一个密钥,xxx 是 blob 存储密钥。

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

我试过了

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

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

编辑

我们的CosmosDb 数据库拥有呈现给用户的数据视图,该数据库拥有指向 blob 的 links,因此另一种选择是索引 CosmosDb 并让索引器跟随链接对于 blob,文档并不表明这是可能的。或者,我们是否会更好地编写自己的indexer 并将其托管为azure function

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

【问题讨论】:

  • 好吧,如果有效,OData 语法将是paths/any(t: startswith(t, '\\Server\Share'))
  • 嗯,好像你不能在带有搜索的 lambdas 中使用任意函数。您可以查看文档以获取更多信息:docs.microsoft.com/en-us/rest/api/searchservice/…
  • 是的,我试过了 :) 我现在正在阅读文档 :) ... 再次 :) 我认为它不支持。

标签: azure azure-cognitive-search


【解决方案1】:

我已经解决了这个问题

var searchParameters = new SearchParameters()
{
    Filter = @"search.ismatch('""\\\\server\\share\\path""','paths','simple','all')",
};

如果需要,我会进行更多测试并更新此答案

【讨论】:

  • 如果您想使用部分术语进行过滤,那么使用 search.ismatch 是正确的做法。正则过滤器表达式需要与查询词完全匹配。您可以从这篇文章了解更多如何自定义处理索引或查询词的方式:docs.microsoft.com/en-us/azure/search/…
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 2021-09-02
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2018-02-27
  • 2021-11-02
相关资源
最近更新 更多