使用标签列表查询文档的最佳方式
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' 评分配置文件获得不错的结果,然后您可以将您想要的标签作为参数传递,给结果一个不合理的高提升。如果然后需要专门按标签过滤,那么在这种情况下,您必须在客户端上进行过滤,以删除未从您的提升配置文件中获得分数的结果
我有一个索引,它有一个字符串集合字段,其中包含标签列表。
有谁知道查询索引的最有效方法,以及要与标签字符串集合匹配的标签列表?
这是我正在尝试做的一个非常低效的例子:
/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' 评分配置文件获得不错的结果,然后您可以将您想要的标签作为参数传递,给结果一个不合理的高提升。如果然后需要专门按标签过滤,那么在这种情况下,您必须在客户端上进行过滤,以删除未从您的提升配置文件中获得分数的结果