2012-10-30 5 views
0

멀티 테넌트 앱을 위해 tiregem을 통해 elasticsearch를 사용하려고합니다. 앱에 많은 사용자가있는 계정이 많은 계정이 있습니다.검색 결과에서 인덱싱 된 데이터 제외 - elasticsearch (tire)

이제 계정 ID를 기반으로 사용자를 색인하고 싶습니다.

사용자 모델 :

include Tire::Model::Search 
    mapping do 
    indexes :name, :boost => 10 
    indexes :account_id 
    indexes :company_name 
    indexes :description 
    end 

    def to_indexed_json 
    to_json(:only => [:name, :account_id, :description, :company_name], 
      ) 
    end 

검색 쿼리 :

User.tire.search do 
    query do 
     filtered do 
     query { string 'vamsikrishna' } 
     filter :term, :account_id => 1 
     end 
    end 
    end 

필터가 잘 작동하고 결과 만 필터링 된 계정 ID 표시됩니다 (1). 그러나, 나는 쿼리 문자열 1을 검색 할 때 :

User.tire.search do 
    query do 
     filtered do 
     query { string '1' } 
     filter :term, :account_id => 1 
     end 
    end 
    end 

는이 경우 1이라는 이름의 사용자 결과가 계정 ID 1과도 사용자와의 모든 사용자에게 표시지고이 말할 수 있습니다. 이는 to_indexed_json에 account_id를 추가했기 때문입니다. 이제 이름 1의 사용자 만 표시 할 수 있습니까? (모든 사용자 는 히트에서 사용할 수 없습니다한다. 단지 이름 1 사용자가 표시되어야합니다) 이름이나 회사 이름이나 설명 등 1에는 사용자가 없으면

, 난 그냥 싶지 않아 결과가 표시됩니다. 그러나 제 경우에 설명했듯이 계정 ID가 1 인 모든 사용자를 얻게됩니다.

답변

0

색인을 생성 한 모든 필드 내용의 사본이 들어있는 _all 특수 필드에서 검색하고 있습니다. 특정 필드를 검색하여 field_name:1과 같은 올바른 결과를 가져야합니다. 혼자 여기가 ... @javanna 답장을

{ 
    "query_string" : { 
     "fields" : ["field1", "field2", "field3"], 
     "query" : "1" 
    } 
} 
+0

감사 그것뿐만 아니라 이름 필드 : 당신이 query string를 사용하여 여러 필드를 검색 할 수 있습니다 원하는 경우

. 나는 사용자 설명, 회사 이름과 같은 다른 필드도 색인으로 생성합니다. 이 경우 사용자 모델에서 검색을 실행하려면 어떻게해야합니까? 도와주세요. –

+0

나는 그것을 얻지 못한다 : 어디서 '1'을 찾고 싶니? 나는 이름 필드에서만 생각했다. 여러 필드를 검색하려면 검색하려는'fields '를 지정하는 쿼리 문자열을 사용할 수 있습니다. – javanna

+0

그런 질문을 게시해서 죄송합니다. 문자열은 여러 필드에있을 수 있습니다. 이름이나 회사 이름 또는 설명이 1 인 사용자가없는 경우 결과를 표시하지 않으려 고합니다. 하지만, 제 경우에는 계정 ID가 1 인 모든 사용자를 얻었습니다. 지금 질문을 편집하겠습니다. –

관련 문제