排除搜索结果中的索引数据 - elasticsearch(轮胎)

时间:2012-10-30 12:13:42

标签: ruby-on-rails elasticsearch tire

我正在尝试通过轮胎宝石使用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中的所有用户。

1 个答案:

答案 0 :(得分:0)

您正在_all特殊字段中搜索,该字段包含您编入索引的所有字段的内容副本。您应该搜索特定字段,以获得正确的结果:field_name:1

如果您愿意,可以使用query string搜索多个字段:

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