Хранение интересных слов из предложения - PullRequest
1 голос
/ 12 апреля 2011

У меня есть предложение, подобное the cat sat on the mat, которое хранится в одном поле sql. Я хочу периодически искать ключевые слова, которых нет в списке остановок, в данном случае cat sat mat Каков наилучший способ сохранить их в таблице SQL для быстрого поиска?

Насколько я вижу, я вижу следующие варианты

  1. До [n] дополнительных столбцов в строке, по одному на каждое слово.
  2. Храните все интересные слова в одном поле, разделенном запятыми.
  3. Новая таблица, связанная с первой из перечисленных выше опций.
  4. Ничего не делать и искать совпадение каждый раз, когда у меня появляется новое слово для поиска.

Какая практика лучше всего, а какая быстрее всего подходит для поиска совпадений слов? Я использую sqlite в Python, если это имеет значение.

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

Лучше всего делать полнотекстовый поиск.

Эти вопросы ПОЛНЫЙ ТЕКСТ Поиск в SQLite и Каталог полнотекстового поиска SQLite , мы надеемся, помогут вам двигаться в правильном направлении.

1 голос
/ 12 апреля 2011

Я делаю что-то похожее с SQLite.По моему опыту, это не так быстро, как другие БД в такой ситуации, поэтому стоит сделать вашу схему максимально простой.

  • До [n] дополнительных столбцов в строке, по одному на каждое слово.
  • Храните все интересные слова в одном поле, разделенном запятыми.
  • Новая таблица, связанная с первой из указанных выше опций.
  • Ничего не делатьи искать совпадение каждый раз, когда у меня появляется новое слово для поиска.

Из ваших 4 вариантов 2) и 4) может быть слишком медленным, если вы хотите масштабировать и сопоставлять, используя LIKE.Сопоставление с использованием полного текста происходит быстрее, так что это стоит посмотреть.1) плохой дизайн базы данных, что если слов больше, чем столбцов?И если есть меньше, это просто потраченное впустую место.3) лучше всего ИМО, если вы сделаете слова первичным ключом в своей таблице, скорость поиска должна быть приемлемо высокой.

1 голос
/ 12 апреля 2011

Я бы предложил дать вашим предложениям ключ, вероятно, ИДЕНТИЧНОСТЬ. Затем я создал бы вторую таблицу, связанную с вашей таблицей предложений, со строкой для каждого интересного слова.

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

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

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