排序搜索结果
默认情况下,Meilisearch 根据相关性对结果进行排序。您可以更改此行为,以便用户在搜索时决定他们希望首先看到的结果。
默认情况下,Meilisearch 侧重于根据相关性对结果进行排序。您可以更改此排序行为,以便用户在搜索时决定他们希望首先看到哪种类型的结果。
这在许多情况下都很有用,例如当用户想在网店中查看最便宜的商品时。
搜索时排序与占位符搜索结合使用时尤为有效。
配置 Meilisearch 以在搜索时排序
要允许您的用户在搜索时对结果进行排序,您必须
- 决定要用于排序的属性
- 将这些属性添加到
sortableAttributes
索引设置中 - 更新 Meilisearch 的排名规则(可选)
Meilisearch 根据字节值按字典顺序对字符串进行排序。例如,值为 225 的 á
将排在值为 122 的 z
之后。
大写字母按小写字母处理进行排序。它们在搜索结果中仍将显示为大写。
将属性添加到 sortableAttributes
Meilisearch 允许您根据文档字段对结果进行排序。只有包含数字、字符串、数字数组和字符串数组的字段才能用于排序。
在您决定了允许用户排序的字段后,您必须将它们的属性添加到sortableAttributes
索引设置中。
如果一个字段在不同文档中具有不同类型的值,Meilisearch 将优先处理数字而非字符串。这意味着具有数字字段值的文档将比具有字符串值的文档排名更高。
这在排序时可能导致意外行为。为获得最佳用户体验,请仅根据包含相同类型值的字段进行排序。
示例
假设您有一个包含以下字段的书籍集合
如果您在网店中使用此数据集,您可能希望允许用户按 author
和 price
排序
自定义排名规则顺序(可选)
当用户在搜索时对结果进行排序时,Meilisearch 的排名规则的设置是使最匹配的结果优先于排序顺序。您可能需要根据应用程序的需求更改此行为。
这是 Meilisearch 排名规则的默认配置
"sort"
排在第五位。这意味着它充当平局打破规则:Meilisearch 将首先把与搜索词紧密匹配的结果放在返回文档列表的顶部,然后才会根据用户的请求应用 "sort"
参数。换句话说,Meilisearch 默认提供非常相关的排序。
将 "sort"
排名规则放在列表中更高的位置将强调彻底排序而非相关排序:您的结果将更严格地遵循用户选择的排序顺序,但相关性会降低。
排序平等地应用于所有文档。Meilisearch 不提供对特定文档进行推广、置顶和提升的原生支持,以使其比其他搜索结果更突出显示。有关使用 React InstantSearch 实现推广搜索结果和文档提升的变通方法,请查阅这些 Meilisearch 博客文章。
示例
如果您的用户更关心找到更便宜的书籍,而不是查找与其查询的具体匹配项,您可以将 sort
在排名规则中放置得更高
在搜索时排序结果
配置 sortableAttributes
后,您可以使用sort
搜索参数来控制搜索结果的排序顺序。
sort
期望一个已添加到 sortableAttributes
列表中的属性列表。
属性必须以 attribute:sorting_order
的形式给出。换句话说,每个属性后面必须跟一个冒号 (:
) 和一个排序顺序:升序 (asc
) 或降序 (desc
)。
当使用 POST
路由时,sort
期望一个字符串数组
当使用 GET
路由时,sort
期望一个逗号分隔的字符串
sort
值的顺序很重要:属性在搜索参数值中的位置越高,Meilisearch 就会越优先处理它。在我们的示例中,如果多个文档的 price
值相同,Meilisearch 将根据它们的 author
决定这些价格相似的文档之间的顺序。
示例
假设您正在网店中搜索书籍,并希望查看最便宜的科幻小说。此查询搜索 "science fiction"
书籍,按价格从低到高排序
使用我们的示例数据集,结果如下所示
按作者姓名搜索书籍很常见。sort
可以帮助将同一作者的结果分组。此查询将仅返回与查询词 "butler"
匹配的书籍,并根据作者对结果进行分组
按嵌套字段排序
使用点表示法根据文档的嵌套字段对结果进行排序。以下查询按用户评论分数对返回的文档进行排序
排序和自定义排名规则
排序和配置自定义排名规则之间存在大量重叠,因为两者都可以极大地影响用户首先看到的结果。
排序在您希望用户能够在查询时更改返回结果的顺序时最有用。例如,网店用户可能希望根据他们正在搜索的内容按价格排序结果,并更改是先看到最贵的产品还是最便宜的产品。
相反,自定义排名规则建立了一个默认排序规则,该规则在每次搜索中都会强制执行。当您希望将某些结果置于所有其他结果之上,无论用户的偏好如何时,这种方法很有用。例如,您可能希望网店始终首先展示打折商品,无论用户正在搜索什么。
示例应用
查看我们的演示,了解如何实现排序的示例