0

我需要存储可以用 JSON 表示的数据,如下所示:

Article{
    Id: 1,
    Category: History,
    Title: War stories,

    //Comments could be pretty long and also be changed frequently
    Comments: "Nice narration, Reminds me of the difficult Times, Tough Decisions" 

    Tags: "truth, reality, history", //Might change frequently

    UserSpecifiedNotes:[
    //The array may contain different users for different articles
    {
        userid: 20,
        note: "Good for work"
    },
    {
        userid: 22,
        note: "Homework is due for work"
    }
    ]
}

在浏览了不同的文章之后,数据的非规范化是处理这些数据的方法之一。但是由于公共字段可能很长,甚至经常更改,我不想重复它。还有什么其他更好的方式来表示和搜索这些数据?亲子?内在对象?


目前,我将处理大量插入、更新和少量搜索。但无论何时要进行搜索,都必须非常快。我正在使用 NEST(.net 客户端)来使用弹性搜索。要使用的搜索查询预计将按如下方式工作:

  1. 输入:searchString和一个userID
  2. 行为:文章包含searchString在标题、评论、标签或给定userID排序的注释中,按相关顺序排列
4

1 回答 1

0

在正常情况下,文章的主要内容将很少更改,而针对文章的“UserSpecifiedNotes”/评论将更频繁地生成/添加。这是实现父子关系的理想用例。

使用内部对象,每次有新注释进入时,您仍然需要重新索引所有“man article”和“UserSpecifiedNotes”/comments。使用父子关系,您将只是添加一个新注释。

使用您指定的详细信息,您可以采用 4 个索引的方法

  • 主要文章(id、类别、标题、描述等)
  • 评论(评论者、评论文本等)
  • 标签(标签,任何其他元标签)
  • UserSpecifiedNotes (userId, notes)

话虽如此,需要记住的是您的实际要求。拥有父子关系将需要更多内存,并且可能会稍微降低搜索性能。但是索引会更快。

另一方面,嵌套对象会显着增加您的索引时间,因为您需要在索引之前收集与文章相关的所有数据。您当然可以存储所有内容并添加为更新。作为更简单的维护和易于实施,我建议使用父子。

于 2015-09-09T12:35:19.133 回答