From 8fb8f2338309e4b38924a3399585fe570e624004 Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 2 Mar 2018 20:00:40 -0800 Subject: [PATCH] Added build_query method [skip ci] --- lib/searchkick/query.rb | 62 +++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/lib/searchkick/query.rb b/lib/searchkick/query.rb index 716ccd0..0302a34 100644 --- a/lib/searchkick/query.rb +++ b/lib/searchkick/query.rb @@ -401,14 +401,6 @@ module Searchkick # post filters set_post_filters(payload, post_filters) if post_filters.any? - if filters.any? || must_not.any? || should.any? - bool = {must: query} - bool[:filter] = filters if filters.any? # where - bool[:must_not] = must_not if must_not.any? # exclude - bool[:should] = should if should.any? # conversions - query = {bool: bool} - end - custom_filters = [] multiply_filters = [] @@ -416,27 +408,7 @@ module Searchkick set_boost_where(custom_filters) set_boost_by_distance(custom_filters) if options[:boost_by_distance] - if custom_filters.any? - query = { - function_score: { - functions: custom_filters, - query: query, - score_mode: "sum" - } - } - end - - if multiply_filters.any? - query = { - function_score: { - functions: multiply_filters, - query: query, - score_mode: "multiply" - } - } - end - - payload[:query] = query + payload[:query] = build_query(query, filters, should, must_not, custom_filters, multiply_filters) payload[:explain] = options[:explain] if options[:explain] payload[:profile] = options[:profile] if options[:profile] @@ -516,6 +488,38 @@ module Searchkick [boost_fields, fields] end + def build_query(query, filters, should, must_not, custom_filters, multiply_filters) + if filters.any? || must_not.any? || should.any? + bool = {must: query} + bool[:filter] = filters if filters.any? # where + bool[:must_not] = must_not if must_not.any? # exclude + bool[:should] = should if should.any? # conversions + query = {bool: bool} + end + + if custom_filters.any? + query = { + function_score: { + functions: custom_filters, + query: query, + score_mode: "sum" + } + } + end + + if multiply_filters.any? + query = { + function_score: { + functions: multiply_filters, + query: query, + score_mode: "multiply" + } + } + end + + query + end + def set_conversions conversions_fields = Array(options[:conversions] || searchkick_options[:conversions]).map(&:to_s) if conversions_fields.present? && options[:conversions] != false -- libgit2 0.21.0