Лучший способ хранить и извлекать синонимы в базе данных mysql

я составляю список синонимов, я сохраню его в базе данных и извлечу перед выполнением полнотекстового поиска.

Когда пользователь вводит как: word1

мне нужно найти это слово в моей таблице синонимов. Поэтому, если слово найдено, я бы ВЫБРАЛ все синонимы этого слова и использовал бы его в полнотекстовом поиске в следующем запросе, где я построю запрос типа

MATCH (columnname) AGAINST ((word1a word1b word1c) IN BOOLEAN MODE )

Так как же мне сохранить синонимы в таблице? Я нашел 2 варианта:

  1. с использованием столбцов ключевых слов и слов, таких как

     ключевое слово val
    -------------
    1 слово1а
    1 слово1b
    1 слово1c
    2 слова2а
    2 word2b
    3 слова3а
    и т.п.
    

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

  1. , используя только столбцы слов, такие как

     word1a | word1b | word1c
    word2a | word2b | word2c
    word3a
    

Теперь я выбираю SELECT для моего слова, если оно находится внутри какой-либо записи, если это так, извлекаю всю запись и взрываю ее в | и у меня снова есть слова, которые я могу использовать.

Этот второй подход кажется более легким в обслуживании для того, кто будет создавать эту базу данных синонимов, но я вижу две проблемы:

a) Как найти в mysql, если слово внутри строки? Мне не нравится слово "word1a", потому что синонимы могут быть очень похожими, в том числе слово 1a может быть земляникой, земляника - птицами, а слово 2a - ягодой. Очевидно, мне нужно точное совпадение, так как же оператор LIKE может точно совпадать внутри строки?

б) Я вижу проблему со скоростью, при использовании LIKE я предполагаю, что потребуется больше дублей mysql, чем "=", используя первый подход, где я точно совпаду слово. С другой стороны, в первом варианте мне нужно 2 утверждения, один, чтобы получить идентификатор слова, и второй, чтобы получить все слова с этим идентификатором.

Как бы вы решили эту проблему, скорее дилемму, какой подход выбрать? Есть ли третий способ, который я не вижу, чтобы администратор мог легко добавлять / редактировать синонимы и в то же время быстро и оптимально? Хорошо, я знаю, что обычно нет лучшего способа; -)

ОБНОВЛЕНИЕ : Решение использовать две таблицы, одну для основного слова, а вторую для слов-синонимов, не будет работать в моем случае. Потому что у меня нет ГЛАВНОГО слова, которое пользователь вводит в поле поиска. Он может ввести любой из синонимов в это поле, поэтому мне все еще интересно, как настроить эти таблицы, поскольку у меня нет основных слов, идентификаторы которых у меня были бы в одной таблице, и синонимов с идентификатором мастера во второй таблице. Нет главного слова.

7
задан Jerry2 20 October 2010 в 09:44
поделиться