Я загружаю текстовые файлы в свою базу данных и пытаюсь выполнить быстрое сопоставление между таблицей, в которой перечислены названия организаций, и таблицей, которая содержит текстовый файл и потенциальные совпадения с этими организациями.
Я загружаю файл, используя LOAD INFILE CONCURRENT
, и у меня нет проблем с этим.
Искривление связано с тем, что поле, которое я пытаюсь сопоставить в необработанной текстовой таблице (occupationoraffiliation
), содержит больше, чем просто названия организаций. Поэтому я пытаюсь использовать LIKE
с символами подстановки, чтобы соответствовать строкам.
Чтобы соответствовать тексту, я пытаюсь использовать этот запрос:
UPDATE raw_faca JOIN orgs AS o
ON raw_faca.org_id IS NULL AND raw_faca.occupationoraffiliation LIKE CONCAT('%',o.org_name,'%')
SET raw_faca.org_id = o.org_id;
Я тоже пробовал без CONCAT
:
UPDATE raw_faca JOIN orgs AS o
ON raw_faca.org_id IS NULL AND raw_faca.occupationoraffiliation LIKE ('%' + o.org_name + '%')
SET raw_faca.org_id = o.org_id;
Таблица raw_faca
содержит ~ 40 000 строк, а таблица orgs
- ~ 20000 строк. У меня есть индексы для всех. Запрос был запущен в течение нескольких часов или около того - это кажется слишком длинным для операции. Это сравнение, которое я пытаюсь провести, просто неэффективно, или я делаю что-то невероятно глупое? Я надеялся избежать построчного использования внешнего php или python-скрипта.
В ответ на комментарии ниже об использовании Match . . . Against
я пробовал также следующий запрос:
UPDATE raw_faca JOIN orgs AS o ON raw_faca.org_id IS NULL AND MATCH(raw_faca.occupationoraffiliation) AGAINST (o.org_name IN NATURAL LANGUAGE MODE)
SET raw_faca.org_id = o.org_id;
И это дает мне эту ошибку:
incorrect arguments to AGAINST
Есть мысли?