假设我有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”,并将其用于提升/得分。