繁体   English   中英

在搜索结果中排除索引数据-ElasticSearch(轮胎)

[英]Exclude indexed data in search results - 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。

您正在搜索_all特殊字段,该字段包含您所索引的所有字段的内容的副本。 您应该在一个特定的字段上进行搜索,以得到正确的结果,例如: field_name:1

如果需要,可以使用查询字符串在多个字段上进行搜索

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM