Azure搜索文档声明:
高基数字段由具有大量唯一值的可分域或可过滤字段组成,因此,在计算结果时消耗大量资源。
但是,目前还不清楚这种糟糕的性能是否仅限于在筛选器/facet查询中专门使用字段,或者当字段被查询时是否会影响性能。
有更深层次的Azure搜索知识的人能参与进来吗?
发布于 2019-07-31 01:31:19
在得到Microsoft的澄清后,我可以确认答案是“不行,只有在使用方面/过滤器中的字段时才会影响性能”。
这种糟糕的性能仅限于在filter/facet查询中专门使用字段时。可搜索的术语不会受到影响。 在分面导航中最有效的字段具有较低的基数:在搜索语料库中的文档中重复少量不同的值(例如,颜色、国家/区域或品牌名称的列表)。如果字段具有大量的唯一值,则在计算facet导航时将消耗大量资源。因为每个不同的值都是一个方面,需要计算。 在查询时,过滤分析器接受条件作为输入,将表达式转换为表示为树的原子布尔表达式,然后在索引中的可过滤字段上计算筛选树。如果字段具有大量的唯一值,那么树就会很深,并消耗大量的计算资源。由于每个唯一值都将在筛选器中计算,因此不会为重复项缓存结果以减少计算。 如果字段具有大量的唯一值,则可搜索字段不会受到影响。因为可搜索字段有倒置指数来加速查询。加载索引时,每个字段的倒排索引都会填充来自每个文档的所有惟一的、标记化的单词,并带有对应的文档ID的映射。例如,当索引酒店数据集时,为City字段创建的反向索引可能包含西雅图、波特兰等的术语。包括西雅图或波特兰在内的城市地区的文档将在术语旁边列出他们的文档ID。
发布于 2019-08-02 14:04:30
我也联系了MS,这是我得到的答案:
“高基数”指的是与可过滤和可搜索字段不同的东西。可过滤字段的基数等于字段全部值的唯一性。对于可搜索的字段,它大约是将文档写入索引所产生的索引项的总数。例如,复杂的自定义分析器可以通过为字符串中的每个单词生成几个标记来增加索引。倒排索引的规模非常好,所以我不会太担心索引中有大量独特的单词。但是,这应该有助于理解每个单位的规模。 文档中提到这一点主要是为了提高人们对什么有助于查询性能以及为什么在向filter子句中添加额外字段时可能会看到性能下降的认识。我将添加…您可以通过扩展服务中的分区数量来提高单个查询的性能。从1到2不仅使您的服务可用的存储加倍,而且使执行查询的计算能力翻了一番。数据工作负载在每个分区之间大致均分。它通常并不等同于查询性能的两倍,但如果您看到的查询速度较慢,则会产生重大影响。
https://stackoverflow.com/questions/57247908
复制相似问题