使用标签列表查询文档的最佳方式

Best way to query documents with a list of tags

我有一个索引,它有一个字符串集合字段,其中包含标签列表。

有谁知道查询索引的最有效方法,以及要与标签字符串集合匹配的标签列表?

这是我正在尝试做的一个非常低效的例子: /indexes/instruments/docs?api-version=2014-07-31-Preview&$top=10&$skip=0&$count=true&search=*&$filter=universes/any(t: t eq 'U') or universes/any(t: t eq 'B') or universes/any(t: t eq 'E')

在此示例中,标签字段为 "universes"。问题是我需要过滤多达 30 个标签,所以这个查询看起来很糟糕!

这是表达这个查询的正确方式。它在语法上看起来确实很长,但从效率的角度来看应该 运行 没问题。决定响应时间的不是这里的术语数量(至少在你提到的数量级),而是匹配集有多大。

10/16/2017 更新:请注意,Azure 搜索现在有一个新的筛选函数 search.in(),它为此类查询提供更紧凑的表示和更快的执行。更多细节和 API 版本要求在这里:https://docs.microsoft.com/en-us/rest/api/searchservice/odata-expression-syntax-for-azure-search

因为您想实施一个明确的过滤器,您的查询确实可能是您能做的最好的。这种类型的过滤器将以任何顺序处理标签,这使得它比其他解决方案更好,这些解决方案通过注入多个标签的串联结果字段来包含 'fixing' 索引。

对于 30+ 个标签,您也可能使用标签 'boost' 评分配置文件获得不错的结果,然后您可以将您想要的标签作为参数传递,给结果一个不合理的高提升。如果然后需要专门按标签过滤,那么在这种情况下,您必须在客户端上进行过滤,以删除未从您的提升配置文件中获得分数的结果

http://azure.microsoft.com/blog/2015/02/05/personalizing-search-results-announcing-tag-boosting-in-azure-search/