簡體   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