提升与方面匹配的 CloudSearch 结果
Boosting CloudSearch results which match facet
我正在使用 AWS CloudSearch 作为搜索索引,用户目前可以在其中搜索与 name
字段和其他一些字段匹配的记录。但是,我们有使用不同语言的用户,我想 boost 匹配他们当地语言的结果。每条记录都有一个 locale
字段,可以是一个方面。但是,我不想简单地 排除 不匹配的结果,也不想简单地对其进行排序,以便无论 'relevance' - 我只想对 locale=<my locale>
.
的任何结果给出 'boost'
换句话说,我希望在不同的语言环境中高度相关的匹配仍然击败在我自己的语言中几乎不相关的匹配,但是在我自己的语言中的相关匹配绝对应该比在不同语言中的匹配排名更高。
当我查询 CloudSearch 时有没有办法做到这一点,或者我是否应该在获取所有结果后重新排序客户端?
所以这非常令人费解,但我最终还是设法让它发挥了作用。如果您正在进行结构化搜索 (q.parser=structured
),那么您可以执行一个查询,如果 locale
字段与给定值匹配,则该查询会得到提升。
可悲的是,它有点麻烦,因为它似乎并不是真正设计用于提升与主查询以外的内容匹配的内容,因此默认情况下它会过滤掉与locale 并将它们完全排除在结果之外。因此,您必须将查询的两个版本与 (or)
结合起来 - 一个有提升,一个没有提升。
所以我的基本查询(在我的例子中已经是 (or 'un' (prefix 'un'))
)现在变成了 (or (and <OLD_QUERY> (term field=locale boost=2.5 'en')) <OLD_QUERY>)
换句话说:要么匹配原始查询,其中 locale='en',提升 2.5,要么在任何区域设置中匹配相同的查询,但没有提升。
很痛苦,但很管用!
我正在使用 AWS CloudSearch 作为搜索索引,用户目前可以在其中搜索与 name
字段和其他一些字段匹配的记录。但是,我们有使用不同语言的用户,我想 boost 匹配他们当地语言的结果。每条记录都有一个 locale
字段,可以是一个方面。但是,我不想简单地 排除 不匹配的结果,也不想简单地对其进行排序,以便无论 'relevance' - 我只想对 locale=<my locale>
.
换句话说,我希望在不同的语言环境中高度相关的匹配仍然击败在我自己的语言中几乎不相关的匹配,但是在我自己的语言中的相关匹配绝对应该比在不同语言中的匹配排名更高。
当我查询 CloudSearch 时有没有办法做到这一点,或者我是否应该在获取所有结果后重新排序客户端?
所以这非常令人费解,但我最终还是设法让它发挥了作用。如果您正在进行结构化搜索 (q.parser=structured
),那么您可以执行一个查询,如果 locale
字段与给定值匹配,则该查询会得到提升。
可悲的是,它有点麻烦,因为它似乎并不是真正设计用于提升与主查询以外的内容匹配的内容,因此默认情况下它会过滤掉与locale 并将它们完全排除在结果之外。因此,您必须将查询的两个版本与 (or)
结合起来 - 一个有提升,一个没有提升。
所以我的基本查询(在我的例子中已经是 (or 'un' (prefix 'un'))
)现在变成了 (or (and <OLD_QUERY> (term field=locale boost=2.5 'en')) <OLD_QUERY>)
换句话说:要么匹配原始查询,其中 locale='en',提升 2.5,要么在任何区域设置中匹配相同的查询,但没有提升。
很痛苦,但很管用!