0

我正在尝试通过轮胎宝石将弹性搜索用于多租户应用程序。该应用程序有许多帐户,每个帐户都有许多用户。

现在我想根据帐户 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 中的所有用户。

4

1 回答 1

0

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

如果您愿意,可以使用查询字符串搜索多个字段:

{
    "query_string" : {
        "fields" : ["field1", "field2", "field3"],
        "query" : "1"
    }
}
于 2012-10-30T12:39:56.510 回答