0

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

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

这是我正在尝试做的一个非常低效的例子: /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 个标签,所以这个查询看起来很糟糕!

4

2 回答 2

2

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

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

于 2015-03-04T17:22:09.673 回答
0

因为您想实现一个显式过滤器,所以您的查询确实可能是您能做的最好的。这种风格的过滤器将处理任何顺序的标签,这使得它比其他解决方案更好,包括通过注入多个标签的连接结果的字段来“修复”索引。

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

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

于 2015-08-24T23:46:22.240 回答