tire-0.4.2를 사용하여 내 레일 어플리케이션의 elasticsearch와 상호 작용합니다 (mongdb 데이터베이스와 mongdb를 사용하여 mongdb와 상호 작용 함). 스팸 문서가 포함 된 게시 모델이 있습니다.elasticsearch의 누락 된 필드를 기준으로 결과를 필터링 할 수 없습니다.
post.rb
include Mongoid::Document
include Mongoid::Timestamps
..
embeds one :spam, as: :spammable
...
spam.rb는
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :spammable, polymorphic: true
field :needs_approval, type: Boolean, default: false
field :is_spam, type: Time
has_and_belongs_to_many :request_spam_by, :class_name => "User"
field :request_spam, type: Boolean, default: false
나는 더 스팸 문서가없는 모든 게시물을 얻으려면 : 여기에 생성 된 타이어 쿼리
Post.tire.search(:load => :true, page: self.page, per_page: Post::PER_PAGE) do |pf|
pf.query{ |query| query.string self.search_text } unless search_text.blank?
pf.filter(:missing, :field => 'spam')
pf.filter(:term, :college_id => self.college.id)
pf.filter(:term, :user_id => self.user.id)
pf.filter(:missing, :field => 'spam')
pf.filter(:terms, :user_type => self.user_type) unless self.user_type.blank?
pf.filter(:range, :created_at => {:gte => self.from_time}) unless self.from_time.blank?
pf.filter(:range, :created_at => {:lte => self.to_time}) unless self.to_time.blank?
pf.sort{|s| s.by :updated_at, self.sort_order}
end
입니다 탄성 검색 쿼리 :
curl -X GET "http://localhost:9200/development_posts/post/_search? from=0&load=true&page=1&per_page=10&size=10&pretty=true" -d '{"sort":[{"updated_at":"desc"}],"filter":{"and":[{"missing":{"field":"spam"}},{"term":{"college_id":"4fb424a5addf32296f00013a"}},{"missing":{"field":"spam"}},{"range":{"created_at":{"gte":"2012-06-05T00:00:00+05:30"}}},{"range":{"created_at":{"lte":"2012-06-05T23:59:59+05:30"}}}]},"size":10,"from":0}'
스팸 문서가 누락 된 문서 만 검색하는 경우에도 쿼리 결과로 나에게 스팸이있는 문서가 제공됩니다. 내가하는 실수가 뭔지 모르겠다. 아무도 올바른 방향으로 나를 가리킬 수 있습니까?
스팸 문서의 필드 '승인이 필요합니다'가 모두 거짓 인 모든 게시물 문서를 가져 오려면 좋음 스팸 문서가 전혀없는 게시 된 문서도 마찬가지입니다. 이 경우 내 쿼리는 어떻게되어야합니까? –
답변이 업데이트되었습니다. –