弹性搜索中的一对多关系

Hen*_*hiu 4 elasticsearch

假设我有两个名为"twitter_user"和"twitter_comments"的表.

twitter_users有字段:username和bio twitter_comments有字段:username和comment

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

我想在弹性搜索中对twitter_users和twitter_comments建模,在我查询时让ES搜索两个模型,知道评论对于twitter用户的整体相关性得分.

我知道我可以通过创建一个额外的字段(除了username和bio)和所有连接的注释来模仿这个模型.但是还有另一种"更清洁"的方式吗?

Tho*_*ten 8

这取决于.

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

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

        "comments" : [
        {
            "title" : "First comment",
            "text" : "My 1st comment"
        },
        {
            "title" : "Second comment",
            "text" : "My 2nd comment"
        }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

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

对于你的得分,只需添加另一个字段"comment_count"并将其用于你的助推/得分.