我的公司希望通过手动指定前几个搜索结果,然后是按其他一些标准排序的所有剩余搜索结果来对搜索结果进行商品化。
一种解决方案是在我们希望首先出现的所有记录上创建一个新的数字字段,然后从其他记录中省略它,然后最后对缺少值的字段进行排序。
但这需要为每个商品搜索创建一个新字段。如果索引映射中有数百甚至数千个仅适用于少数记录的字段,搜索是否会变得低效?
对于这个问题,还有其他我们没有想到的解决方案吗?
我的公司希望通过手动指定前几个搜索结果,然后是按其他一些标准排序的所有剩余搜索结果来对搜索结果进行商品化。
一种解决方案是在我们希望首先出现的所有记录上创建一个新的数字字段,然后从其他记录中省略它,然后最后对缺少值的字段进行排序。
但这需要为每个商品搜索创建一个新字段。如果索引映射中有数百甚至数千个仅适用于少数记录的字段,搜索是否会变得低效?
对于这个问题,还有其他我们没有想到的解决方案吗?
老实说,我不确定 ES 会对这么多领域有何反应……但这听起来有点吓人。
如何创建单个字段merchandised_search
,然后对 匹配术语过滤器的任何文档 执行constant_filters_score提升?
如果你使提升足够大,匹配过滤器的文档将自动排序到列表的顶部,而其他所有内容都会正常排序。只需在 中使用不同的值,您就可以进行不同的商品搜索merchandised_search
。而且过滤器很快,所以它不应该对你的表现造成太大的伤害。
像这样的东西:
{
"custom_filters_score" : {
"query" : {
"match" : {"field1" : "test text to query"}
},
"filters" : [
{
"filter" : { "term" : { "merchandised_search" : "search1" } },
"boost" : "10"
}
],
"score_mode" : "first"
}
}