Умная альтернатива полнотекстовому поиску mysql - PullRequest
1 голос
/ 29 октября 2011

Table1

  • ID INT
  • Метки TEXT

Table2

  • ID INT
  • Теги ТЕКСТ

Поле тегов может выглядеть следующим образом "abc def hij 123". Теги, разделенные пробелом. Каждая запись может иметь более 200 тегов. (Теги определяются "на лету")

Учитывая запись из таблицы1, я хочу найти "наиболее подходящую" запись из таблицы2, где теги в строке из таблицы1 соответствуют тегам в строке из таблицы2.

Похоже, что для этого лучше всего использовать текстовый поиск MySQL FULL.

В Table2 должно быть только около 800-1000 строк - так что здесь не так много служебной информации. Но у Table1 может быть 20 миллионов, и в будущем я, возможно, захочу сделать обратное (найти лучшее совпадение из таблицы table1 для строки в table2).

Вопрос:

Как вы думаете, поиск в ПОЛНОМ ТЕКСТЕ лучше всего использовать здесь? Если нет, то что может быть альтернативой?

Я изучил базы данных XML, и они обещают (особенно Xbase) ... но уверен ли я, что эта база данных будет запущена на производственном компьютере? Еще нет ... (или я должен?)

Ответы [ 2 ]

2 голосов
/ 29 октября 2011

Полнотекстовый поиск вам не поможет, потому что ни ваша игла , ни ваш стог сена не нормализуются.Если у вас был только один тег (стрелка) для поиска в ненормализованном списке (стог сена), вам может помочь FTS.Но вместо этого вам нужно сначала нормализовать список поисковых тегов в кучу отдельных игл, а затем искать каждый из них в стоге сена.

Вам гораздо лучше сначала просто нормализовать данные(отдельные таблицы тегов в форме (ID, тег)) ​​и использование JOIN для определения количества точек соприкосновения.

В дальнейшем Я бы предложил одну таблицу TaggedItemsтакая структура: (TAG TEXT(3), ID1 INTEGER, ID2 INTEGER).Если вы хотите пометить таблицу 1, вы должны ввести INSERT OR UPDATE (или эквивалент MySQL) для тега и столбца ID1.То же самое для таблицы 2 и столбца ID2.Теперь вы можете получить рейтинг сходства, выбрав количество записей в этой таблице, где ID1 = значение ID1, которое вас интересует, а ID2 НЕ НУЛЬ, GROUPed BY ID2.Присоединение не требуется.

0 голосов
/ 29 октября 2011

Вы могли бы иметь другую таблицу, выражающую отношение между ID и каждым отдельным словом "aaa" "bbb" ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...