0

Tire (ElasticSearch ラッパー gem) の場合、特定の属性に nil/null 値を持つインデックス付きレコードをクエリして除外するにはどうすればよいですか。たとえば、私がこの関係を持っている場合

class Article < ActiveRecord::Base
  belongs_to :topic
end

記事のインデックスを作成しましたが、topic_id = nilのレコードを引き戻したくありません。このコードブローを試しましたが、うまくいきませんでした。

class Article
  belongs_to :topic

  def search(q)
    tire.search do
       ...
         filter :missing, :field => :topic_id, { :existence => false, :null_value => false }
         ...
         ### filter :range, :topic_id => { :gt => 0 } # ==> I tried this as well but didn't work
       ...
    end
  end
end
4

3 に答える 3

2

既存の値を持つドキュメントのみをフィルタリングする場合は、 exists フィルターを使用する必要があると思いますtopic_id

class Article
  belongs_to :topic

  def search(q)
     tire.search do
       ...
       filter :exists, :field => :topic_id
       ...
    end
  end
end

または、クエリでクエリ文字列を使用でき_exists_:topic_idます。

于 2012-09-12T09:27:48.747 に答える
1

してみてください:

class Article
  belongs_to :topic

  def search(q)
    tire.search do
         ...
         filter :not, :missing => {:field => :topic_id, { :null_value => true } }
         ...
    end
  end
end

これはうまくいくはずです。フィールドが存在するかどうかを確認する場合は、存在が必要です。null_value チェックが必要なだけだと思います。

于 2013-01-10T06:16:14.280 に答える
-3

@articles = Article.where('topic_id is not?'、nil)

于 2012-09-10T17:40:57.020 に答える