[search] posting list内存索引

  1. 请问上课讲得内存索引是按doc shard的 那为什么还需要这个doc_id_1, doc_id2, Screen Shot 2021-04-11 at 10.29.58 am

这里是不是doc_id都是同一个值吗? 或者为什么需要重复这么多次一样的doc_id_x?

  1. 这里的单一关键词搜索

a. cache query
b. 内存索引:第二步 DocID 排序的Posting List
c. 内存索引:…

请问这里的内存索引为什么是按docID排序呢?我理解的是这里是一个Request去内存里找,然后汇总到一起最后按docID排序,不知道是不是这个意思?如果是, 那如果汇总的数据太大, 一台放不下怎么办?

  1. index maintainers是要把in-memory index storage里面的部分不常访问的内容 转移到on-disk index storage吗?

  2. 请问是on-disk index storage 会有in-memory index storage 里面的全部信息吗(当然存储格式不一样)?还是说 除了最新的index(disk 没有)旧数据disk都有?

我理解是in-memory有全部最新的index, 然后index-maintainer会定期的向disk去发送new changes(从in-memory storage得到).

  1. 想确定一下 map-reduce只是跟新in-memory index storage, 不会更新on-disk index storage, on-disk index storage 是有index-maintainer定期更新的

谢谢

  1. 不是同一个值,每个 Shard 里会有很多不一样的 doc_id。
  2. 排序是事先排好的,不是汇总最后一起排序。
  3. 不是这个意思。写入会先发生在内存里,然后 Index maintainer 后统一更新到硬盘。
  4. 硬盘上会有全部信息。
  5. 还是这样理解比较好 - MapReduce 结果被写到 Bigtable 里面。这个写入的具体实现是先写在 memtable 部分,然后统一写到 SSTable
    Screen Shot 2021-04-16 at 2.04.16 AM

追问一下

  1. 那请问搜索结果排序这里怎么做 比如就最简单的从最新到最旧的 20条?

  2. 你的意思是 bigtable就是 in-memory index storage和 on-disk index storage的实现
    a. in-memory index storage就是bigtable的memtable,
    b. on-disk index storage就是bigtable 的 SSTable

谢谢

  1. 我之前说的是按照 document id 排序的结果,考虑 ranking 的话(比如按照网页的上次更新时间),就需要做进一步的排序,可以在这个问题里的回答
  2. 是这个意思。