2012-02-15 12 views
0

단어를 공백이있는 구에서 문자열로 저장하는 키워드 테이블을 만들고 싶고 사용자가 구를 입력하면 구 테이블에서 키워드 id에 대한 참조가 추가됩니다. 레일에서 키워드 및 구문 모델링

나는 테이블은 다음과 같이해야한다고 생각 :

키워드 :

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 

수있는 방법이 있다는 것을 I 레이에서 이것을 할 수있다. 나는 아마도 has_many 관계를 가지고 있기 때문에 같은 Domain_ID를 가진 모든 구문의 목록을 반환하는 @ domain.phrases를 전달하여 구문을 얻을 수 있으며 Keyword_ID가

인 키워드를 포함하는 모든 키워드를 @ keyword.phrases가 나열합니다

필자의 목표는 테이블에서 중복 행을 방지하는 것입니다. 레일즈가하는 더 나은 디자인을 제안 해 주시겠습니까?

답변

1

설명이 태그의 개념과 매우 유사하므로 이미 사용 가능한 tagging libraries 중 하나를 사용하거나 구조를 연구하여 견고한 솔루션을 찾을 수 있습니다.

예를 들어 acts_as_taggable_on 보석의 경우 here is the migration입니다. 그러면 코드에서 모델 (및 모델 간의 관계)을 비롯한 다른 사람들이이 작업을 수행 한 방법을 알 수 있습니다.

이 도구는 매우 적은 코드로 @domain.tags을 모든 레코드에 추가 할 수있는 기능을 제공합니다. 라이브러리 중 일부에서는 태그를 호출 할 대상을 정의 할 수 있습니다. 따라서 키워드로 호출하려는 경우이를 수행 할 수 있으며 예제에서와 같이 @domain.keywords 또는 @domain.phrases 등의 호출이 가능합니다.

검색을 돕기 위해 키워드를 추가하는 것이 궁극적 인 목표 인 경우 full text search (텍스트, 제목 등이 키워드에 대해 자동으로 색인 생성되는)을 가능하게하는 훌륭한 검색 라이브러리 및 도구가 있습니다. 명시 적으로 키워드를 정의하십시오.

정말로 가고 싶은 곳에 따라 다르지만, 이는 몇 가지 지침입니다. 도메인의 문구와 키워드의 문구에 액세스 할 수 있습니다,이 설정으로

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 

당신이 당신의 질문의 끝에서 설명하는 방법 : 응용 프로그램을 설계했던대로

+0

elhu가 보여 주듯이 단순 연결을 통해 acts_as_taggable_on을 사용하는 것에 대한 장단점은 무엇입니까? 두 번째 메모에. URL을 입력으로 받아 들일 수있는 보석이 있다면 콘텐츠를 폐기하는 URL을 크롤링하고 내 앱의 추천 키워드로 구문 분석하면 좋을 것입니다. 이 작업을 수행 할 수있는 보석이나 API를 알고 있습니까? 지금까지 https://github.com/apneadiving/SemExtractor#readme에서 텍스트를 사용하여 텍스트를 사이트에서 가져 왔지만 라이센스로는 웹 크롤러/스파이더와 통합 할 수 없습니다. – Arosboro

+0

태그의 개념에 대해 묻고있는 유사성을 지적했습니다. 실제로 원하는 것은 태그 또는 기능적으로 동등한 것이었기 때문입니다. 프로는 자신을 구현 (및 유지) 할 필요가 없으며 대신 다른 사람의 작업을 활용할 수 있습니다. – jefflunt

0

, 당신은 다음과 같은 세 가지 모델을 것이다 . 당신은, 당신은 다음과 같이 클래스를 작성합니다 더 나아가, 특정 도메인에 특정 키워드를 가진 모든 도메인, 또는 모든 키워드에 액세스 할 수 원하는 경우

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 

건배.

+0

수업을 작성해 주셔서 감사합니다. @ domain.phrases는 저장 한 순서대로 키워드 목록을 반환합니까? 나는 원래 어구를 추적하려고 노력 중이므로 요청한 검색 어구를 실행하고 나가기 위해 내 애플리케이션에 알릴 수있다. – Arosboro

+0

Nevermind 귀하의 게시물에서 이것을 놓쳤습니다. "이 설정으로 질문 끝에 대답하는 방식으로 도메인 구 및 키워드 구에 액세스 할 수 있습니다" – Arosboro

+0

기본적으로 ID는 오름차순으로 정렬되지만 쉽게 변경할 수 있습니다 이 동작은 범위를 사용합니다. 그것에 관한 많은 온라인 문서가 있습니다. 그러나 별도로 저장된 단어 목록에서 문장을 함께 모으는 것이 실제로 잘 수행되는지 확신 할 수 없습니다. 나는 당신이 그의 대답에서 제안 된 솔루션의 일부를 더 깊이 파야 할 시간이 있다면 그렇게 생각한다. – Elhu

관련 문제