弹性搜索-根据外部因素改变相关性



我的用例有点复杂,所以我通过使用产品和购买来简化它:

该应用程序有一个大数据库,其中包含不同的表,其中包括产品和购买(many-to-many:user_id:product_id)。Elastic只有一个产品索引,因为这是唯一需要高级/大规模搜索的实体。

我正在努力实现以下目标:当前用户购买产品的次数越多,我就越希望它具有相关性

棘手的是,Elastic只有产品指数,而没有购买指数。我可以在数据库中执行查询,获得用户购买产品的次数信息,并将结果传递给Elastic,问题是如何做到这一点。

谢谢。

如果您可以为每个搜索者生成一个合理有界的购买历史记录,您可以使用可选的should块术语查询列表在布尔查询中实现这一点

例如

"bool": {
  "must": [ <existing query logic> ],
  "should": [
    {
       "term": { "product_id": 654321 },
       "boost": 3 <e.g. Purchased 3 times>
    },
    {
       ...
    }
  ]
}

作为提醒,评估大量这些可选的布尔子句会降低您的查询性能,因此,如果可以满足您的要求,您也可以考虑使用重新搜索请求,将您的提升逻辑仅应用于前100个未提升的搜索点击。

最新更新