2012-10-30 107 views
0

我試圖通過輪胎寶石的elasticsearch使用多租戶應用程序。該應用擁有多個帳戶,每個帳戶擁有多個用戶。排除搜索結果中的索引數據 - elasticsearch(輪胎)

現在我想索引基於帳戶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

如果你願意,你可以在多個領域使用query string搜索:

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

感謝您的答覆@javanna獨自我這裏......它不只是名稱字段。我確實有其他字段,如用戶描述,公司名稱以及索引。在那種情況下,我該如何在用戶模型上運行搜索?請幫忙。 –

+0

我不明白:你想在哪裏搜索'1'?我只想到名字領域。如果你想在多個領域進行搜索,你可以使用查詢字符串來指定要搜索的「fields」。 – javanna

+0

我很抱歉發佈這樣的問題。該字符串可以在多個字段中。如果沒有用戶名爲1或公司名稱或說明的用戶,我只是不希望顯示任何結果。但是,在我的情況下,正如我所解釋的,我將獲得帳戶ID爲1的所有用戶。我現在將編輯該問題。 –