Моделирование ключевых слов и фраз в Rails - PullRequest
0 голосов
/ 15 февраля 2012

Я хочу создать таблицу ключевых слов, в которой слова хранятся в строке (из фразы с пробелами), и если пользователь вводит фразу, он добавляет ссылку на идентификатор ключевого слова в таблице фраз.

Я думаю, что таблицы должны выглядеть так:

Ключевое слово:

ID | Word
-----------
1, a
2, keyword
3, phrase

Домен:

ID | Name
-----------
1, findme.org

Фраза:

Phrase_ID | Keyword_ID | Domain_ID | Word_Weight
-----------
1, 1, 1, 0
1, 2, 1, 1
1, 3, 1, 2

Есть ли способ, которым я могу сделать это в rails, возможно, с отношением has_many, чтобы я мог получить фразу, передавая @ domain.phrases, возвращающий список всех фраз с одинаковым Domain_ID, и @ keyword.phrases перечисляет все фразы, содержащие ключевое слово с Keyword_ID

Моя цель - избежать дублирования строк в любой из таблиц, это запутанно? Не могли бы вы предложить лучшую конструкцию, которая является рельсовым способом ведения дел?

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

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

Например, - это миграция для драгоценного камня acts_as_taggable_on, которая даст вам представление о том, как это сделали другие люди, включая модели (и отношения между моделями) в коде.

Эти инструменты с очень небольшим количеством кода позволяют добавлять @domain.tags к любой записи. Некоторые из библиотек также позволяют вам определять, как вы хотите называть теги - поэтому, если вы хотите назвать их ключевыми словами, вы можете сделать это, и у вас будут вызовы типа @domain.keywords или @domain.phrases и т. Д., Как в вашем примере.

Кроме того, если конечной целью этого является добавление ключевых слов для облегчения поиска, существуют отличные поисковые библиотеки и инструменты, которые позволяют полнотекстовый поиск (где текст, заголовки и т. Д. Автоматически индексируется для ключевых слов) без необходимости явно определять ключевые слова.

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

0 голосов
/ 15 февраля 2012

При разработке приложения у вас будет три модели:

class Keyword < ActiveRecord::Base
  has_many :phrases
end

class Domain < ActiveRecord::Base
  has_many :phrases
end

class Phrase < ActiveRecord::Base
  belongs_to :keyword
  belongs_to :domain
end

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

class Keyword < ActiveRecord::Base
  has_many :phrases
  has_many :domains, through: :phrases
end

class Domain < ActiveRecord::Base
  has_many :phrases
  has_many :keywords, through: :phrases
end

class Phrase < ActiveRecord::Base
  belongs_to :keyword
  belongs_to :domain
end

Затем вы можете получить доступ к этой информации со следующими данными:

@keyword.domains # All the domains matching with the keyword
@domain.keywords # All the keywords for a specific domain

Приветствие.

...