| 
 | 
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Всем привет! Ситуация следующая - для каждой записи в таблице нужно хранить набор текстовых тэгов - обычно 2-3 штуки, но некоторым нужно 5-6. Создавать колонки tag1, tag2, ...tagN пока не хочется. Решение в лоб - хранить тэги в отдельной колонке как varchar строку в которой тэги записаны через пробел, запятую, точку с запятой... Но тогда вопрос - как индексировать такое поле, чтобы селекты были быстры и точны :) Насколько я знаю запросы LIKE + метасимволы во многих БД очень неторопливы, но может я ошибаюсь. Использую PostgreSQL 11. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 20:37 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Решением в лоб здесь будет create table tags (id int primary key, id_From_parent_table references parent table, tag_text varchar) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 20:48 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  SERG1257Решением в лоб здесь будет create table tags (id int primary key, id_From_parent_table references parent table, tag_text varchar) Спасибо за ответ. А что делать если у меня таких таблиц (с основными записями) несколько, плюс они секционированные, плюс в дальнейшим будут добавляться новые таблицы? Твой вариант конечно хороший и соответствует самой идее реляционных БД, но хочется избежать создания дополнительных таблиц там, где это возможно. Создать табличку - ерунда, дело 30 минут, но потом поддерживать такой зоопарк будет довольно накладно :) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 21:07 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  sdkmaster но хочется избежать создания дополнительных таблиц там, где это возможно.Избегайте. Каждый сам кузнец своего геморроя. sdkmaster потом поддерживать такой зоопарк будет довольно накладно :) Поддерживайте костылевелосипед. Вряд ли будет дешевле. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 21:29 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  SERG1257sdkmaster но хочется избежать создания дополнительных таблиц там, где это возможно.Избегайте. Каждый сам кузнец своего геморроя. sdkmaster потом поддерживать такой зоопарк будет довольно накладно :) Поддерживайте костылевелосипед. Вряд ли будет дешевле. Почему же сразу костылевелосипед :) Тэги не самая важная вещь, основной поиск, 80-90% всех запросов, будет вестись по другим полям, которые хорошо проиндексированы. Но для некоторых запросов, примерно 10-20%, нужен поиск именно по тэгам. Поэтому и спрашиваю насчет организации - как сделать лучше, но так чтобы не создавать лишнюю таблицу. Ничего страшного, что придется хранить все тэги в одной строке и пить кофе пока select+like сделают свою работу. Но если есть рецепт получше, а я уверен что форумчане с подобным уже сталкивались, то буду ему очень рад. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 21:57 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Можно описать задачу по-другому - "как сделать быстрым select для поиска подстроки в строке". Возможно есть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк. Если все что нам доступно, это like+метасимволы, то грустно. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 22:10 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  sdkmasterесть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк.Делайте вычисляемые поля tag1, tag2, ...tagN которые будут вычислятся из строки через запятую и их индексируете. Будет ли это лучше - не факт, зато таблицу создавать не надо. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.08.2019, 22:23 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  sdkmasterВозможно есть какие-то джедайские техники или секретное шаолиньское искусство построения индекса для строк. Full Text Search. Posted via ActualForum NNTP Server 1.5 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.08.2019, 00:16 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Разбить строку с тэгами на части и класть это всё в недоEAV. Потребуется две таблички. Поиск будет по значению тэга не как like, а как обычное сравнение. Индекс по имени тэга позволит сэкономить на чае и кофе. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.08.2019, 08:44 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  sdkmaster, в Постгресе есть ещё нечёткий поиск через триграммные индексы. Можно эту тему посмотреть. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.08.2019, 10:41 | 
  
  
  
   | 
||
| 
 
Как хранить и индексировать тэги 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  sdkmaster, в Postgresql хорошо оптимизирован тип JSONB. Если вы построите по нему индекс то поиск по нужным атрибутам документа будет достаточно быстрым. На уровне MongoDb. Положите в JSONB ваши теги. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.08.2019, 16:24 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?desktop=1&fid=32&tid=1539916]:  | 
    0ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    11ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    49ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    44ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 233ms | 
| total: | 366ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.