后端程序员之路 34、Index搜索引擎实现分析3-对文章索引的两层分块

# part_indexer 对文章根据id的hash进行分块索引
- 持有 search_index _inc_index[2]; search_index _history_index[2]; 进行实际的搜索操作
- get_size 调用search_index的search
- get_all_items 调用search_index的get_all_items
- search 根据条件获取一批文章
    - 传入user_profile_t、search_params_t、filter_judge用于搜索
    - 传入p_scoring用于打分,当搜索结果多于search_params._count时根据scores取前面的文章
- get_item
    - 传入doc_id,调用search_index的get_item获取文章
    - 执行search_index.get_forward_index_ptr()->filter_ids()

# search_index 对文章根据语言、地域、类型进行分块索引
- 持有 index_box _index_box; IndexBoxes _index_boxes;
    - get_items _index_box.get_items(docid_vect, result, filters)
    - get_all_items _index_box.get_all_items
- 持有 std::map<std::string, uint32_t> _language_pool,_region_pool,_type_pool
- inc_data、insert_doc 添加文章
    - 区分文章的LANGUAGE、REGION、TYPE,拼成字符串进行hash作为key
    - _index_boxes[key].insert_doc(doc); 或者 _index_boxes.insert({key, box});
    - _index_box.insert_doc(doc);
- search
    - generate_keylist search_params->keylist
    - foreach cit in keylist
        - fit = _index_boxes.find( *cit );
        - fit._inverted_index.trigger

原文地址:https://www.cnblogs.com/zapline/p/6697531.html