【发布时间】:2015-05-04 03:03:22
【问题描述】:
我正在尝试开发一个高级排序表达式,但不知道如何做到这一点。查询可以在弹性搜索或 ravendb(或 lucene 表达式)中完成。首选是使用 ravendb,即我打算拥有所有数据,但如果无法在 ravendb 上执行此操作,则弹性搜索将是一种替代方法。 主要思想是在某些字段值上有“分数”,所以我们可以传递这个分数值并有自定义类型的结果。
产品列表如下所示(概念):
{
name: 'product 1',
brand: 1,
filters: [1, 2, 7, 10]
},{
name: 'product 2',
brand: 2,
filters: [1, 3, 7, 15]
},{
name: 'product 3',
brand: 2,
filters: [1, 2, 8, 10]
},{
name: 'product 4',
brand: 3,
filters: [2, 8, 10]
}
我想通过查询品牌和过滤器的分数,像这样:
品牌 1:得分 10
品牌 2:得分 15
过滤器 1:得分 10
过滤器 3:得分 5
过滤器 10:得分 8
这样,我将得到以下排序的产品列表:
产品 3:15(品牌 2)+ 10(过滤器 1)+ 8(过滤器 10)= 33
产品 2:15(品牌 2)+ 10(过滤器 1)+ 5(过滤器 3)= 30
产品 1:10(品牌 1)+10(过滤器 1)+8(过滤器 10)=28
产品 4:8(过滤器 10)= 8
这个查询需要是动态的,所以我可以像这样发送下一个查询:
品牌 1:得分 10
品牌 2:得分 15
品牌 3:16
过滤器 1:得分 5
过滤器 3:得分 5
过滤器 10:得分 1
而且排序后的结果会发生变化:
产品 2:15(品牌 2)+ 5(过滤器 1)+ 5(过滤器 3)= 25
产品 3:15(品牌 2)+ 5(过滤器 1)+ 1(过滤器 10)= 21
产品 4:16(品牌 3)+1(过滤器 10)=17
产品 1:10(品牌 1)+ 5(过滤器 1)+ 1(过滤器 10)= 16
有任何ravendb、lucene或elastic search的查询,我都可以得到这个排序的结果,不需要循环它们(因为会同时有很多查询)?
谢谢!
【问题讨论】:
标签: database sorting lucene ravendb