一尘不染

Elastic search中的一对多关系

elasticsearch

假设我有2个表,分别称为“ twitter_user”和“ twitter_comments”。

twitter_users 具有字段:用户名和生物 twitter_comments 具有字段:用户名和注释

显然,一个用户在twitter_users中有1个条目,在twitter_comments中可能有很多条目

我想在Elastic
Search中同时对twitter_users和twitter_comments进行建模,在查询时让ES搜索两种模型,因为知道注释已计入Twitter用户的整体相关性得分。

我知道我可以只用一种模型来模拟这一点,方法是创建一个额外的字段(除了用户名和生物之外),并将所有注释串联在一起。但是还有另一种“更清洁”的方式吗?


阅读 325

收藏
2020-06-22

共1个答案

一尘不染

这取决于。

如果您只想搜索用户注释,全文和所有字段,只需将所有注释存储在用户对象中(无需串联任何内容):

{
    "user" : {
        "username" : "TestUser",
        "bio" : "whatever",

        "comments" : [
        {
            "title" : "First comment",
            "text" : "My 1st comment"
        },
        {
            "title" : "Second comment",
            "text" : "My 2nd comment"
        }
        ]
    }
}

如果您需要基于注释的查询,则需要将注释映射为嵌套的(在提交任何数据之前),以便将每个注释视为一个项目。

对于您的得分,只需添加另一个字段“ comment_count”,并将其用于提升/得分。

2020-06-22