Amazon web services cloudsearch查询可提高精确匹配范围
在cloudsearch结构化查询中 我有几个领域我正在搜索 在字段1上,用户选择“2” 在字段2上,用户选择“1” 我希望将其作为范围查询运行,以便返回的结果为-1到+1 在场1上,范围为1,3,在场2上,范围为0,2 我想做的是对结果进行排序,使匹配字段1和字段2的结果位于顶部,其余结果位于其下方 例如,其中字段1=2和字段2=1将位于顶部,而其余字段不按任何特定顺序排列 注意:我确实需要按距离对结果进行排序,这样所有精确匹配的结果都是按距离排序的,其余的结果都是按距离排序的Amazon web services cloudsearch查询可提高精确匹配范围,amazon-web-services,amazon-cloudsearch,Amazon Web Services,Amazon Cloudsearch,在cloudsearch结构化查询中 我有几个领域我正在搜索 在字段1上,用户选择“2” 在字段2上,用户选择“1” 我希望将其作为范围查询运行,以便返回的结果为-1到+1 在场1上,范围为1,3,在场2上,范围为0,2 我想做的是对结果进行排序,使匹配字段1和字段2的结果位于顶部,其余结果位于其下方 例如,其中字段1=2和字段2=1将位于顶部,而其余字段不按任何特定顺序排列 注意:我确实需要按距离对结果进行排序,这样所有精确匹配的结果都是按距离排序的,其余的结果都是按距离排序的 我确信我可以用
我确信我可以用两个查询来实现这一点,只要尽可能减轻工作量,就可以在一个查询中实现。假设您的字段是“a”和“b”,指定的值是
a=2
和b=1
(与您的示例一样,除了我将字段命名为“a”和“b”而不是“1”和“2”)。以下是您查询的各种术语
范围查询
这是对范围a±1和b±1的查询,其中a=2
和b=1
:
q=(and (range field=a[1,3]) (range field=b[0,2]))
等级表达式
对于排名表达式,使用绝对值计算基于距离的分数,这样分数“a”和“b”就不会相互抵消(例如,a=3,b=0
will):
按等级排序
这定义了一个名为rank1
的排名表达式,我们现在要按它排序,从最低值开始('0'表示a=2,b=1):
返回排名
出于调试目的,您可能需要返回排名分数:
return=rank1
把所有这些术语放在一起,你就有了你的疑问
更多可能有用的东西
如果你想以一种非线性的方式来惩罚事物,你可以使用exp
。例如,如果您想区分“a”和“b”都是1分,而“a”是完全匹配的,而“b”是2分(例如a=3,b=2
将排在a=2,b=3
之前,即使之前的排名将给他们两个2分):
您可以使用布尔逻辑和三元运算符来检测并偏好满足特定标准的特定结果,例如,当“a”和“b”达到目标时,会产生较大的提升,当“a”或“b”达到目标时,会产生较小的提升,等等(因为我们是从低到高排序的,所以实际上通过在结果中添加较少的内容来实现排名提升):
看
sort=rank1 asc
return=rank1
expr.rank1=exp(abs(a-2))+exp(abs(b-1))
((a==1&&b==2)?0:100)+((a==1||b==2)?0:1000)+abs(a-1)+abs(b-2)