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

Elastic search - change the relevance according to an external factor

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

该应用程序有一个包含各种表格的大型数据库,其中包括产品和购买(多对多:user_id:product_id)。 Elastic 仅对产品有索引,因为这是唯一需要 advanced/high 规模搜索的实体。

我想要实现的目标如下: 当前用户购买产品的次数越多,我希望它越相关。

棘手的部分是 Elastic 只有产品索引,没有购买索引。 我可以在数据库中执行查询并获取用户购买产品的次数信息,并将结果传递给 Elastic,问题是如何做。

谢谢。

如果您可以为每个搜索者生成合理范围内的购买历史记录,则可以在 bool query using a list of optional should block term queries

中实现这一点

例如

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

请注意,评估大量这些可选的布尔子句会降低您的查询性能,因此您还可以考虑使用 rescore request 将提升逻辑仅应用于前 100 个未提升的搜索命中率,如果这能满足您的要求。