Elasticsearch:根据喜欢推荐用户

Elasticsearch: suggest users based on likes

我正在尝试在 elasticsearch 中模拟用户建议系统,该系统考虑了用户的喜好和个人资料。

我有这样的用户结构:

user: { 
    id: 232344,
    location: 'New York',
    likes: [4545, 3434, 343]
}

我想根据以下三个概念向用户推荐:

1) 喜欢我的用户

2) 用户喜欢我喜欢的那个。 (相似的位置等)

3) 相互喜欢。 (用户a喜欢用户x。用户b喜欢用户x。将用户a推荐给b,反之亦然。)

我已经阅读了 elasticsearch 中的 More like this 查询,但我不确定它是否可以考虑所有这些情况。

我如何在 elasticsearch 查询中对这些东西建模,或者我应该考虑使用像 neo4j 这样的图形数据库?

1) 喜欢我的用户。假设我的id是1

{ 
    "query": {
        "term" : { "likes" : 1 }
    }
}

2) 检查 more like this api。给定文档 ID 和一组字段,它会使用与给定文档相似的文档进行响应。有很多选项,所以我建议阅读文档并查看它是否适合您的用例。

3) 相互点赞:假设我是a,我喜欢这些用户[1, 3, 5]。此查询将 return b 如果 b 也喜欢其中一个 ID。

{ 
    "query": {
        "term" : { "likes" : [1, 3, 5] }
    }
}