我的用例有点复杂,所以我通过使用产品和购买来简化它:
应用程序有一个包含各种表的大型数据库,其中包括产品和购买(多对多:user_id:product_id)。 Elastic只有产品的索引,因为这是唯一需要进行高级/高级搜索的实体。
我想要实现的目标如下: 当前用户购买产品的次数越多,我希望它就越相关。
棘手的部分是Elastic只有产品的索引,而不是购买。 我可以在数据库中执行查询并获取用户购买产品的次数信息,并将结果传递给Elastic,问题是如何操作。
感谢。
答案 0 :(得分:2)
如果您可以为每位搜索者生成合理限制的购买历史记录,则可以使用可选should
块bool query
E.g。
"bool": {
"must": [ <existing query logic> ],
"should": [
{
"term": { "product_id": 654321 },
"boost": 3 <e.g. Purchased 3 times>
},
{
...
}
]
}
作为一个单挑,评估大量这些可选的布尔子句会降低您的查询性能,因此您也可以考虑使用rescore request将提升逻辑仅应用于前100个未提升搜索点击,如果这将满足您的要求。