使用ElasticSearch中的自定义排序字段进行推销

时间:2013-02-01 18:11:22

标签: sorting mapping elasticsearch

我的公司希望通过手动指定前几个搜索结果以及按其他一些标准排序的所有剩余搜索结果来推销搜索结果。

一种解决方案是在我们想要首先显示的所有记录上创建一个新的数字字段,并从其他记录中省略它,然后在该字段上排序,最后缺少值。

但这需要为每个商品搜索创建一个新字段。如果索引映射中有数百甚至数千个字段仅适用于少数记录,那么搜索是否会变得低效?

我们还没有想到这个问题的另一个解决方案吗?

1 个答案:

答案 0 :(得分:0)

老实说,我不确定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"
   }
}