弹性搜索,嵌套。功能排序
Elastic Search, Nest. functional sorting
我正在构建一个过滤器页面,其中包含分面等,它可以正常工作。
现在我们的客户有一个请求,基本上 "Be able to decide which sorting the items comes out in"。
每个产品都装饰有产品展示订单,并且在产品系列中。
我们得到了这些示例产品展示订单:
1. 特色项目
2.核心项目
3.备件
4.实用程序
以及这些产品线:
1.锤子
2.锯
3.木头
排序是这样的:
排序应首先基于产品展示顺序,其次是产品线,第三是字母顺序。
因此,首先列出所有属于 特色商品 的产品,然后所有这些特色商品按其 产品线 排序,如果某些产品是在相同的特色项目和产品线中,然后按字母顺序排列。
挑战是:我不能只得到产品展示订单项和产品线的排序作为产品上的数字,我只得到一个 name/id。
我们考虑过根据产品是否属于不同类别来进行Boosting,但看起来有点乱。
或
看看是否可以在排序中加入一些逻辑。
按 productDisplayOrder 排序:
1. featured, 2. core Item ...
然后按产品线:
1. 锤子,2. 锯...
然后按名称 DESC.
这种排序哪种方式最好,能不能把这个逻辑给elastic,如果匹配了再排序。还是我们需要扭曲产品的提升?
希望这对您有意义。
提前致谢! :)
选项 1)。 Quickest/Best 执行解决方案是为 productDisplayOrder
和 ProductLine
创建 new/separate 整数字段,然后按照描述在您的排序标准中使用它们(在重新索引和验证数据被索引后正如预期的那样)。
选项 2) 如果您想要比描述更多的细微差别(例如,得分更高的比赛可以 'break through' 描述的排序上限),那么您可以探索使用 Function Score Query 来实施自定义评分策略,该策略采用productDisplayOrder
和 ProductLine
在生成总匹配分数时考虑。
选项 3)。如果您不能更改映射和重新索引您的数据,您可以使用 Script-Based Sorting 使用脚本从当前索引的 productDisplayOrder/ProductLine 文本生成排序值(例如 Groovy)。请记住,查询性能会比前两个选项差。
我正在构建一个过滤器页面,其中包含分面等,它可以正常工作。 现在我们的客户有一个请求,基本上 "Be able to decide which sorting the items comes out in"。 每个产品都装饰有产品展示订单,并且在产品系列中。
我们得到了这些示例产品展示订单: 1. 特色项目 2.核心项目 3.备件 4.实用程序
以及这些产品线: 1.锤子 2.锯 3.木头
排序是这样的: 排序应首先基于产品展示顺序,其次是产品线,第三是字母顺序。 因此,首先列出所有属于 特色商品 的产品,然后所有这些特色商品按其 产品线 排序,如果某些产品是在相同的特色项目和产品线中,然后按字母顺序排列。
挑战是:我不能只得到产品展示订单项和产品线的排序作为产品上的数字,我只得到一个 name/id。
我们考虑过根据产品是否属于不同类别来进行Boosting,但看起来有点乱。
或
看看是否可以在排序中加入一些逻辑。 按 productDisplayOrder 排序: 1. featured, 2. core Item ... 然后按产品线: 1. 锤子,2. 锯... 然后按名称 DESC.
这种排序哪种方式最好,能不能把这个逻辑给elastic,如果匹配了再排序。还是我们需要扭曲产品的提升?
希望这对您有意义。 提前致谢! :)
选项 1)。 Quickest/Best 执行解决方案是为 productDisplayOrder
和 ProductLine
创建 new/separate 整数字段,然后按照描述在您的排序标准中使用它们(在重新索引和验证数据被索引后正如预期的那样)。
选项 2) 如果您想要比描述更多的细微差别(例如,得分更高的比赛可以 'break through' 描述的排序上限),那么您可以探索使用 Function Score Query 来实施自定义评分策略,该策略采用productDisplayOrder
和 ProductLine
在生成总匹配分数时考虑。
选项 3)。如果您不能更改映射和重新索引您的数据,您可以使用 Script-Based Sorting 使用脚本从当前索引的 productDisplayOrder/ProductLine 文本生成排序值(例如 Groovy)。请记住,查询性能会比前两个选项差。