Postgres регулярное выражение по строке на большой текстовой строке через запятую - PullRequest
0 голосов
/ 13 февраля 2020

Я создал таблицу с различными столбцами для фильтрации, такими как id, date и regex_col в приведенных ниже примерах. Цель этой базы данных - дать пользователю возможность соответствующим образом фильтровать искомую json_b_value. Текущая база данных не очень большая, около ~ 100 млн. Строк.

Я взял имена строк из json_b_value, чтобы создать regex_col с мыслительным процессом, которым я могу каким-то образом индексировать regex_col и позволить пользователям выполнять поиск регулярных выражений. для json_b_value они ищут. Текст в regex_col хранится в виде большой строки, разделенной запятыми, с количеством слов в диапазоне от 10 до 150.

id   | date |          regex_col           |     json_b_value
1      2019   'some','stuff','to','search'         json
2      2018   'different','stuff','other'          json
3      2019     'lots','of','stuff'                json

Пользователь будет взаимодействовать и искать в этом столбце с помощью выбора. js раскрывающийся список , Отдельная таблица берет все слова, разделенные запятыми, из regex_col и связывает их все вместе по очереди, как показано ниже. Тогда слова, соответствующие их поиску, будут заполняться по мере их ввода, любые слова, не соответствующие ничему, приведут к нулю.

search_words |
'some'
'stuff'
'to'
'search'

Каким будет эффективный способ индексирования regex_col? Это оптимальный способ сделать это, если я даже создаю regex_col или я пытаюсь оптимизировать его вокруг json_b_value?

пример значения json для идентификатора 1 ниже

[{"regex_col":"some","current":100,"previous":200},{"regex_col":"stuff","current":200,"previous":400},{"regex_col":"to","current":300,"previous":600},{"regex_col":"search","current":400,"previous":800}]

1 Ответ

0 голосов
/ 13 февраля 2020

Может быть много факторов, но в большинстве случаев лучшим решением является следующее:

Создайте новую таблицу с двумя столбцами

id, term

и затем заполните

1    'some'
1    stuff'
1    'to'
1    'search'
2    'different' 
2    'stuff' 
2    'other' 
3    'lots'        
3    'of'        
3    'stuff'        

Теперь поместите индекс в эту таблицу, и вы GTG

...