当前位置: 首页 > 面试题库 >

Elastic search中的一对多关系

郤望
2023-03-14
问题内容

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

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

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

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

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


问题答案:

这取决于。

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

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

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

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

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



 类似资料:
  • 问题内容: 我知道在Elasticsearch中,我们可以在文档之间建立子/父关系。 然后,在建立索引时,我可以传递父代ID,以便将子文档和父文档链接起来: 无论如何,在Elasticsearch中建立多对多关系的模型吗? 数据驻留在具有以下架构的MySQL数据库中: 当前这是我的映射(请原谅数组表示法,我在PHP中使用Elastica与我的Elasticsearch服务器通信): 这种方法的问题

  • 问题内容: 在我的elasticsearch服务器中,我只有一个索引。 (博客)索引包含多种类型。 如:,。 在标签类型中,我创建了1000多个标签,并在帖子类型中创建了10个帖子。 例如:帖子 例如:标签 我想将现有标签分配给博客帖子(即,关系=>映射)。 如何将标签分配给帖子映射? 问题答案: 您可以在Elasticsearch中使用4种方法来管理关系。在Elasticsearch博客文章-E

  • 问题内容: 我有两个表: 帖子: 和标签: posts.tags和tags.tag都是文本类型。我想要的是从tag.tag到帖子中的行的关系,这样查询将给我对应于帖子1和2的行,查询给我2和3,给我1和3,依此类推。 我已经看过外键,但是我不确定这是我想要的。(老实说,我不确定它是做什么的)。据我所知,外键必须等于表的主键/唯一列。但是我想要的是诸如此类的所有行。我还希望能够获得以b开头的所有标签

  • 这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统

  • 问题内容: 我想在两个实体(消费者和政策)之间建立一对多关系。一个消费者应该有几项政策。 这是我希望拥有的Consumer JSON对象的示例: 这是我到目前为止所拥有的: 政策实体 消费者实体 我认为这并不难,但是我现在尝试了几个小时而无法完成。我是Spring的新手,所以如果有人能够帮助我,我将非常感激! 问题答案: @Entity public class Consumer { 不是必需的,