Советы по разработке эффективного полнотекстового поиска документов JSON с использованием Cloud. Большой стол - PullRequest
0 голосов
/ 15 ноября 2018

Нам нужна помощь в разработке полнотекстового поиска с помощью 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»", ...}

Где у каждой строки есть семейство столбцов с тысячами (или миллионами) столбцов, где ключом является идентификатор документа (пустой байт [])

Простое сопоставление ИЛИ является эффективным O(1), а затем мы разбиваем на страницы

Но находим пересечение столбцов (идентификаторы документов, которые имеют правильное значение для 2 типов, составляют, по сути, O(n) документов - для этого требуется полный диапазон столбцовсканирование мы могли бы пройти через тысячи столбцов передвыровнять их

Мы не можем полагаться на наличие вторичной индексной таблицы, поскольку число критериев (число полей, которые может содержать запрос AND, определяется пользователем, и мы заранее не знаем числополей / значений - они токенизированы из документов JSON)

Спасибо за любой совет

1 Ответ

0 голосов
/ 21 марта 2019

Добавление комментария Гэри в качестве официального ответа:

Cloud Bigtable не обязательно лучший инструмент для работы.

Вы не можете проиндексировать данные в чем-то вроде Elasticsearch? В качестве альтернативы комбинация Algolia плюс Google Cloud Firestore должна хорошо работать в этом конкретном случае:

https://cloud.google.com/firestore/docs/solutions/search

...