elasticsearch,Sorting,Mapping,elasticsearch" /> elasticsearch,Sorting,Mapping,elasticsearch" />

Sorting 在ElasticSearch中使用自定义排序字段进行商品营销

Sorting 在ElasticSearch中使用自定义排序字段进行商品营销,sorting,mapping,elasticsearch,Sorting,Mapping,elasticsearch,我的公司希望通过手动指定前几个搜索结果,然后是按其他条件排序的所有剩余搜索结果来销售搜索结果 一种解决方案是在我们希望首先出现的所有记录上创建一个新的数字字段,并从其他记录中省略它,然后在该字段上最后使用缺少的值进行排序 但这需要为每个商品化搜索创建一个新字段。如果索引映射中有数百甚至数千个字段只应用于少数记录,搜索是否会变得低效 对于这个问题,还有其他我们没有想到的解决方案吗?老实说,我不确定ES会对那么多领域做出什么反应……但这听起来有点可怕 创建一个单独的字段商品搜索,然后对任何与术语过滤

我的公司希望通过手动指定前几个搜索结果,然后是按其他条件排序的所有剩余搜索结果来销售搜索结果

一种解决方案是在我们希望首先出现的所有记录上创建一个新的数字字段,并从其他记录中省略它,然后在该字段上最后使用缺少的值进行排序

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


对于这个问题,还有其他我们没有想到的解决方案吗?

老实说,我不确定ES会对那么多领域做出什么反应……但这听起来有点可怕

创建一个单独的字段
商品搜索
,然后对任何与术语过滤器匹配的文档执行增强,怎么样

如果您将boost设置得足够大,那么与过滤器匹配的文档将自动排序到列表的顶部,而其他所有文档都会正常排序。只需在
商品搜索
中使用不同的值,即可进行不同的商品搜索。而且过滤器速度很快,所以不会对性能造成太大影响

大概是这样的:

{
   "custom_filters_score" : {
       "query" : {
           "match" : {"field1" : "test text to query"}
       },
       "filters" : [
            {
               "filter" : { "term" : { "merchandised_search" : "search1" } },
               "boost" : "10"
            }
       ],
       "score_mode" : "first"
   }
}

这可以让我控制结果的顺序,还是只确保在商品搜索中包含该术语的记录在没有该术语的记录之前返回?您可以控制整个记录集的顺序,例如,按分数降序排序和按名称升序排序。但使用此方法,您将无法对“商品搜索”结果与“常规”搜索结果进行不同的排序。