【问题标题】:Azure Search Order Alpha Before Numeric数字前的 Azure 搜索顺序 Alpha
【发布时间】:2020-09-01 12:49:39
【问题描述】:

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

据我所知,order-by 字段首字母的默认排序规则是:

! ” # $ % & ' () * + , - ./. 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 搜索中的默认排序?

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

【问题讨论】:

  • '!' 的关键 ascii是 33,而“A”是 65,“a”是“97”。我想不出办法来实现这一目标。
  • 是的,即使没有向 Azure 搜索团队寻求魔法,我也不太确定如何进行这种级别的订购定制!
  • 我的方法是有一个没有特殊字符的辅助字段,仅用于订购
  • 虽然我喜欢这个想法,但 Thiago,一个新的排序字段将排序逻辑推送到业务上,而不是用代码解决问题。即,一些业务用户将不得不为每个产品提供替代描述,而不是让代码“弄清楚”。
  • 不,您可以复制您将启用排序的每个字段的内容,并使用删除特殊字符的分析器,在订购时,只需指定复制字段而不是原始字段。用户端没有交互。

标签: azure azure-cognitive-services azure-search-.net-sdk


【解决方案1】:

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

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

  1. [Azure 函数] 在搜索索引中创建一个自定义字段,其名称类似于“defaultOrderBy”,类型为“Edm.Int32”。此字段将用作默认排序字段,无法通过搜索查询检索到。

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

例如:

A = 0
B = 2
C = 4

...

! = 84
" = 86

...

0 = 112
1 = 114

...
  1. [Azure 函数] 加载搜索索引数据时,新的“defaultOrderBy”列将填充产品描述字段中第一个字母的“重量”等效项。例如,如果产品描述是“10 天超级神奇咀嚼维生素”,那么第一个字符是“1”,它将被转换为 114 的重量,并保存在“defaultOrderBy”索引字段中。

  2. [Web API] 调用 Search API 获取产品列表时,默认 order-by 将是新的“defaultOrderBy”列。因为它只包含代表我们自定义搜索排序权重的数字,所以排序应该按需要工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多