我正在尝试通过轮胎宝石使用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 :(得分:0)
您正在_all
特殊字段中搜索,该字段包含您编入索引的所有字段的内容副本。您应该搜索特定字段,以获得正确的结果:field_name:1
。
如果您愿意,可以使用query string搜索多个字段:
{
"query_string" : {
"fields" : ["field1", "field2", "field3"],
"query" : "1"
}
}