Azure 搜索顺序在数字之前按字母顺序排列



从 Azure 搜索对结果进行排序时,结果的排序顺序是以数字或特殊字符开头的字符串值先于以字母开头的字符串值。

据我所知,排序依据字段的第一个字母的默认排序规则是:

! ” # $ % & ' () * + , - ./. 0 1 2 3 4 5 6 7 8 9. :;< = >? @. A B C D E F G H I J K L M N...

为了满足业务需求,我需要对结果值进行自定义排序,如下所示:

A B C D E F G H I J K L M N.! ” # $ % & ' () * + , - ./. 0 1 2 3 4 5 6 7 8 9. :;< = >? @. ...

此排序顺序需要显示以字母开头的产品描述然后再显示以数字或特殊字符开头的产品描述。

有没有办法自定义 Azure 搜索中的默认顺序?

如果没有,是否有其他方法可以完成此业务需求? 也许以某种方式加权以字母开头的产品描述比那些没有字母的产品描述更有权重......但我认为这必须在将数据加载到搜索存储库中而不是检索数据时发生。 我希望能够在检索搜索结果时自定义顺序,以便它可以应用于任何字段。

这是我到目前为止提出的解决方案,它应该可以满足业务需求,而无需他们做任何额外的工作。 欢迎建设性的批评。

请注意,实现 Azure 搜索涉及两个服务:从 Cosmos 数据库加载搜索索引数据的 Azure 函数和用于查询搜索索引的 Web API。

  1. [Azure 函数] 在搜索索引中创建一个名称为"defaultOrderBy"且类型为"Edm.Int32"的自定义字段。 此字段将用作默认的排序依据字段,并且无法通过搜索查询进行检索。

  2. [Azure 函数] 在配置或设置文件中创建一个键值对集合,为每个排序依据字符分配一个数字"权重"。

例如:

A = 0
B = 2
C = 4
...
! = 84
" = 86
...
0 = 112
1 = 114
...
  1. [Azure 函数] 加载搜索索引数据时,新的"defaultOrderBy"列将使用产品描述字段中第一个字母的"权重"等效值进行填充。 例如,如果产品描述是"10天超级神奇咀嚼维生素",则第一个字符是"1",它将转换为保存在"defaultOrderBy"索引字段中的权重114。

  2. [Web API] 调用搜索 API 获取产品列表时,默认的 order-by 将是新的"defaultOrderBy"列。 由于它仅包含表示自定义搜索顺序权重的数字,因此排序应按预期工作。

相关内容

  • 没有找到相关文章

最新更新