elasticsearch,Nest,elasticsearch" /> elasticsearch,Nest,elasticsearch" />

Nest 弹性搜索,嵌套。功能分类

Nest 弹性搜索,嵌套。功能分类,nest,elasticsearch,Nest,elasticsearch,我正在构建一个过滤器页面,其中包含了facet等,它可以正常工作。 现在,我们的客户有一个要求,基本上是“能够决定哪种分类的项目出来”。 每个产品都装饰有一个产品展示订单,并位于一个产品线中 我们得到了以下示例产品展示订单: 1.特色项目 2.核心项目 3.备件 4.效用 这些产品线: 1.锤子 2.锯 3.木料 排序是这样的: 排序应首先基于产品展示订单,其次是按产品线,第三是按字母顺序。 因此,首先列出所有属于特色项目的产品,然后根据其产品线对所有这些特色项目进行排序,如果某些产品属于同一特

我正在构建一个过滤器页面,其中包含了facet等,它可以正常工作。 现在,我们的客户有一个要求,基本上是“能够决定哪种分类的项目出来”。 每个产品都装饰有一个产品展示订单,并位于一个产品线中

我们得到了以下示例产品展示订单: 1.特色项目 2.核心项目 3.备件 4.效用

这些产品线: 1.锤子 2.锯 3.木料

排序是这样的: 排序应首先基于产品展示订单,其次是按产品线,第三是按字母顺序。 因此,首先列出所有属于特色项目的产品,然后根据其产品线对所有这些特色项目进行排序,如果某些产品属于同一特色项目和产品线,则按字母顺序排列

挑战在于:我不能仅仅将产品显示订单项和产品线作为产品上的一个数字进行排序,我只能得到一个名称/id

我们曾考虑根据产品是否属于不同的类别来提升,但这似乎有点混乱

看看是否可能在排序中有一些逻辑。 按productDisplayOrder排序: 1.二,。核心项目。。。 然后按产品线: 1.锤子,2。看到。。。 然后叫DESC

哪种方式是进行排序的最佳方式,是否可以将此逻辑赋予elastic(如果匹配),然后对其进行排序。还是我们需要扭转产品的增长

希望这对你有意义。 提前感谢!:)

选项1)。最快/性能最好的解决方案是为
productDisplayOrder
ProductLine
创建新的/单独的整数字段,然后按照所述在排序条件中使用这些字段(在重新索引和验证数据后,数据按预期索引)

选项2)如果您想要比描述的更细微的差别(例如,得分更高的匹配可以“突破”所描述的排序上限),那么您可以探索使用a来实施自定义评分策略,该策略在生成总体匹配分数时考虑
productDisplayOrder
ProductLine


备选方案3)。如果无法更改映射并重新索引数据,则可以使用脚本(例如Groovy)从当前索引的productDisplayOrder/ProductLine文本生成排序值。请记住,查询性能将比前两个选项差

谢谢你,彼得。我知道最理想的选项是第一个,但我们不知道该字段在搜索时是否包含正确的值,因为如果ProductDisplayOrder的排序可以更改,那么我们的产品就不会被重新索引。使用函数分数查询,我是否可以100%确保控制我想要的分数?听起来您需要您的客户机生成一个动态脚本以在查询中使用。(最后两个选项中的任何一个)非常感谢Peter。我们将尝试使用选项1,并在编辑排序节点时重新编制索引。然后我们可能需要对所有产品重新编制索引,但排序不应该经常改变。因此,与其在客户面前慢一点,不如在编辑面前慢一点。还有第四种选择,可以使在“排序节点”上更改顺序的成本非常低,但它附带了内存溢价和分片策略的限制。您可以使用“排序节点”作为父节点(将产品作为子节点)对数据父/子节点进行建模。然后,您可以使用
函数\u score
查询将排序建模为基于父级和子级中的值的计分脚本。选项1可能仍然是更好的方法,但请阅读此处了解更多信息: