我们需要帮助设计BigTable(例如结构JSON文档)的全文本搜索并支持AND
布尔查询
为支持OR
,我们认为我们的设计相对不错,
架构就是这样:
行键格式:
json.field_type_1:value1
:doc_ids_family {“ docid1”,“ docid2”,“ docid3”,...}
json.field_type_1:value2
:doc_ids_family {“ docid2”,“ docid4”,“ docid5”,...}
json.field_type_2:value1
:doc_ids_family {“ docid1”,“ docid4”,“ docid6”,...}
json.field_type_1:value2
:doc_ids_family {“ docid6”,“ docid7”,“ docid8”,...}
每行都有一列列,在许多情况下,这些列具有数千(或数百万)列,其中键是文档ID(空白字节[])
简单的OR匹配有效O(1)
,然后我们进行分页
但是找到列的交集(本质上说,两种类型具有正确值的文档ID是O(n)
的文档-需要进行完整的列范围扫描,我们可能需要先遍历数千列,然后再对齐它们
我们不能依赖于具有辅助索引表,因为条件的数量(AND
查询可能包含的字段数是用户定义的,并且我们不预先知道字段/值的数量-它们是从JSON文档中标记的)
谢谢您的建议
答案 0 :(得分:0)
添加加里(Gary)的评论作为正式答案:
Cloud Bigtable不一定是完成这项工作的最佳工具。
您是否无法像Elasticsearch这样索引数据?另外,Algolia和Google Cloud Firestore的组合在这种特定情况下应该可以很好地工作: