2012-10-30 106 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的所有用户。我现在将编辑该问题。 –