2011-03-11 5 views
0

제목과 내용으로 구성된 게시물 모델이 있습니다.키워드 배열을 사용하여 레일스 텍스트 검색

사용자가 제출 한 양식을 배열로 분할 한 다음 해당 제목과 내용에서이 키워드를 검색하는 텍스트 검색을 구현하고 싶습니다. 사용자가 용어를 사용하면 좋아요 것

If the title is : Today its a nice day 
and the content: Today I woke up at 7am and.. 

예 반환되는 : "day woke 7am"

이 Heroku가 위치에 비트 pricy이기 때문에 내가 어떤 전체 텍스트 검색을 사용하는 것을 선호하지 않습니다 내 앱이 호스팅됩니다.

이처럼 SQL 검색을 구현하는 데 가장 적합한 방법은 무엇입니까? 내 결과에 가중치를 적용 할 수 있습니까? 누구나 내게 어떤 코드 스 니펫을 보여줄 수 있습니까?

답변

0

나는 당신이 당신의 포스트 모델에 글을 쓸 것이다. 나는

  1. 검색 문자열와 downcase 매개 변수
  2. 로 검색 문자열을 받아들이고 배열 (2A)으로 바꿀 것입니다 방법을 만들 것입니다. 나는 모든 1 또는 2 문자 단어를 꺼내는 것을 고려할 것입니다.
  3. 그런 다음 나는 posts 테이블을 반복합니다. 각 줄을 살펴볼 때, 나는 - 제목과 본문을 결합하고, 조합을 소문자로 바꾸어 배열로 바꾼다. - 배열 작업을 수행하고 결과가 빈 배열 인 각 게시물을 저장한다. 나는 당신의 포스트 모델처럼 편리 모델이없는 - -
  4. 는 결과 게시물이이 테스트되지 않은 상태입니다

을 반환

  • 그러나 희망 당신은 내가 여기서 뭘하는지 얻을 수 있습니다 :

    데프 charlie_search (검색 _ 문자열) output_array = [] Post.all.each do | p | search_string.downcase.split 인 경우 output_array.push (p.id) - (p.title.downcase.split + p.description.downcase.split) == [] 끝 게시.찾기 (output_array) 끝

    나는 당신의 상황에 비싼 무엇을 이해하지 않습니다.

    Google 사이트 검색 창을 Google 사이트에두고 (Google에 여전히 해당 서비스가 있다고 생각할 수 있음) Google이 귀하의 모든 페이지에 대한 색인을 생성하면 누군가 검색 할 때 Google 검색 목록을 얻을 수 있습니다. 단지 귀하의 사이트.

    어쨌든 일치 항목을 찾는 것은 Google과 같은 검색 색인이 실제로 유용하다는 것을 의미합니다. 검색 결과를 제공하기 위해 검색 색인을 사용하여 다른 답변을 찾은 것 같습니다.

  • 0

    편집 http://github.com/outoftime/sunspot

    SOLR

    에 대한 태양 흑점을 시도해보십시오

    에 따라 당신을 도울 수 있습니다.

    Articles.find(:all, :conditions => ["match(title,body) against (?)", "Databases"]) 
    

    여기서 제목과 본문은 데이터베이스 열이며 키워드는 '데이터베이스'입니다. 더 많은 옵션을 보려면 mysql에서 match-against을 확인하십시오.

    P '(') 하루 7 am'.downcase.split을 보니 '가'하나 있어요 '-'오늘 : "-"방법은

    http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

    +0

    답변을 주셔서 감사합니다. Ashish, heroku (http://addons.heroku.com/websolr)에서 비용이 많이 드는 것처럼 외부 보석을 사용하고 싶지는 않지만 분명히 말씀 드렸습니다. 코드를 찾고 있습니다. 내 자신에게 SQL 방식으로. – Sharethefun

    +0

    훨씬 더 좋지만 postgresql이 허용한다고 생각하지 않습니다. PGError : 오류 또는 구문 오류 : "에 대해" 감사합니다. – Sharethefun

    0

    한 슈퍼 간단한 방법은 루비의 배열을 사용하는 것입니다 그 좋은 하루 오늘 나는 오전 7시에 일어 났고. downcase.split ('') == []

    +0

    죄송합니다. 얻지 못해 죄송합니다. 이 코드는 어디에 넣으시겠습니까? 고맙습니다 – Sharethefun

    관련 문제