2016-09-08 2 views
1

Я собираюсь использовать цикл for/each для поиска разных имен (table1) среди текстовой информации записей в другой таблице (table2) с использованием регулярных выражений.Эффект для каждого цикла для соответствия фразам?

SELECT id FROM "table1" 
where tags ~* 'south\s?\*?africa' 
    or description ~* 'south\s?\*?south' 
order by id asc; 

но я не знаю, как положить его в каждый цикл!

table1:

t1ID | NAME 
1 | Shiraz  
2 | south africa 
3 | Limmatplatz 

table2:

t2ID |TAGS     | DESCRIPTIONS 
101 |shiraz;Zurich;river | It is too hot in Shiraz and Limmatplatz 
201 |southafrica;limmatplatz| we went for swimming 

У меня есть список имен в table1. В другой таблице есть текстовая информация, которая может содержать эти имена. Номер: table2 Адрес: table1 Адрес электронной почты: id.

Например:

t2id | t1id 
101 |1 
101 |3 
201 |2 
201 |3 

Мои таблицы имеют 60.000 и 550.000 строк. Мне нужно использовать способ, чтобы время было эффективным!

ответ

1

Вам не нужен цикл. Простое соединение работает.

SELECT t2.id AS t2id, t1.id AS t1id 
FROM table1 t1 
JOIN table1 t2 ON t2.tags  ~* replace(t1.name, ' ', '\s?\*?') 
       OR t2.description ~* replace(t1.name, ' ', '\s?\*?') 
ORDER BY t2.id; 

Но производительность будет ужасно для больших таблиц.
Есть несколько вещей, которые вы можете сделать, чтобы улучшить его:

  1. Нормализовать table2.tags в отдельную 1: п таблице.
    Или отношение n: m к таблице tag, если теги используются повторно (типичный случай). Реквизиты:
  2. Использование триграмма или TextSearch индексы
  3. Использовать LATERAL присоединиться фактически использовать эти индексы.
  4. В идеале, использовать новые возможности в Postgres 9.6 для поиска фраз с полнотекстовым поиском.The release notes:

Полнотекстовый поиск теперь можно искать фразы (несколько смежных слов)

+0

спасибо за ответ! Я новичок в Postgresql, чтобы использовать несколько смежных слов! :( – Raha1986

+0

Я хотел выполнить поиск в java, но я думал, что это может быть быстрее в базе данных! – Raha1986

+0

@ Raha1986: Совместимость шаблонов - сложный вопрос. Если вы сделаете это правильно, ваши РСУБД (особенно Postgres) будут выполнять его * намного быстрее, чем любой другой экземпляр в вашей цепочке инструментов. –

Смежные вопросы