我的用例有点复杂,所以我通过使用产品和购买来简化它:
该应用程序有一个大数据库,其中包含不同的表,其中包括产品和购买(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个未提升的搜索点击。