2013-05-30 2 views
1

나는 Elasticsearch 구현을 위해 Tire를 사용하고 있습니다. 내 환경은 Linux, Ruby 1.9.3이 포함 된 Rails 3.2입니다. 보석 타이어 (0.5.8)를 사용하여 Elasticsearch를 사용하여 색인을 생성 할 수 있습니다. 하지만 성능을 향상시키기 위해 인덱스 데이터에서 데이터를 표시하고 데이터베이스를 누르지 않으려합니다 (INSERT 및 UPDATE에만 db를 사용하려고합니다).Tastic을 사용하여 Elasticsearch 인덱스에서 데이터를 가져 오는 방법

내가 사용하고 있기 때문에
result = Tire.search 'jobs', load: true do 

    query do 
    string "is_active:1" 
    end 
    filter :range, status: {gte: 0 } 
    sort { by :created_at, 'desc' } 
end 

    return result.results 

부하 :

내가 코드를 아래에 사용하고이를 달성하기 위해 사실이 데이터베이스 안타 내가 해야하는 건 내가 부하 특성을 제거하고하지 않습니다 (MySQL은) 다음 날 준다 결과가 없다. 언급 된 테이블의 모든 열에 대해 색인이 생성되었는지 확인할 수 있습니다 ("xxx : 9200/jobs/_mapping? pretty = 1").

내가 어떻게 달성 할 수 있는지 제안 해주십시오.

감사합니다.

+0

** ** result.inspect **는 무엇을 반환합니까? – concept47

+0

감사합니다 @ concept47 response.Now에 대한 ActiveRecord 대신 탄성 모델을 얻을 수 있어요. 반환 된 result.inspect는 다음과 같습니다 : # false, : page => 1, : per_page => 20}, @path = \ "/ jobs/_search \", @query = # {: query => @silter = {: created_at => \ "desc \"}, @filters = [{: range => {: 상태 => {: gte => 0}}} ] 자, 열렬한 로딩 코드를 대체하기위한 연관성을 어떻게 얻을 수 있을까요? – Animesh

답변

0

load: true은 반환 된 각 결과에 대해 데이터베이스를 호출합니다. 이것이 없으면 결과는 모델의 인스턴스처럼 작동하는 Item 개체입니다.

당신이해야 할 일은 모델에 매핑이 설정되어 있는지 확인한 다음 색인을 가져와야합니다. 모델이 인덱스를 설정 한 후

class User 
    include Mongoid::Document 
    field :name, type: String 
    mapping do 
     indexes :name 
    end 
end 

은 그럼 당신은 rake tire:import CLASS=User 그 것이다 인덱스 사용자 클래스를 실행하겠습니다. 여기 좋은 문서의

search = Tire.search(User.index_name) do 
    query { string 'billy' } 
end 
puts search.results.first.name 

많이 할 것입니다 후 https://github.com/karmi/tire

+0

여러분 모두에게 감사드립니다. 나는 그것을 얻었다. – Animesh

0
load: true 

는 연관들에 대해 데이터베이스를 참조합니다. 맵핑에 연관을 추가하여 elasticsearch에 연관을 저장할 수 있습니다.