class Ddr::Index::QueryClause
Constants
- ANY_FIELD
- ANY_VALUE
- DISJUNCTION
- NEGATIVE_QUERY
- QUOTE
- REGEXP_QUERY
- STANDARD_QUERY
- TERM_QUERY
Public Class Methods
absent(field)
click to toggle source
Builds a query clause to filter where field is NOT present (no values)
# File lib/ddr/index/query_clause.rb, line 68 def absent(field) new(field: field, value: ANY_VALUE, template: NEGATIVE_QUERY) end
before(field, value)
click to toggle source
Builds a query clause to filter where date field value is earlier than a date/time value.
# File lib/ddr/index/query_clause.rb, line 89 def before(field, value) new(field: field, value: "[* TO %s]" % Ddr::Utils.solr_date(value)) end
Also aliased as: before_date_time
before_days(field, value)
click to toggle source
Builds a query clause to filter where date field value is earlier than a number of days before now.
# File lib/ddr/index/query_clause.rb, line 95 def before_days(field, value) new(field: field, value: "[* TO NOW-%iDAYS]" % value) end
disjunction(field, values)
click to toggle source
Builds a query clause to filter where field contains at least one of a set of values.
# File lib/ddr/index/query_clause.rb, line 73 def disjunction(field, values) value = values.map { |v| quote(v) }.join(" ") new(field: field, value: value, template: DISJUNCTION) end
join(from:, to:, where:)
click to toggle source
Builds a Solr join clause @see wiki.apache.org/solr/Join
# File lib/ddr/index/query_clause.rb, line 80 def join(from:, to:, where:) field, value = where.to_a.first from_field = FieldAttribute.coerce(from) to_field = FieldAttribute.coerce(to) template = "{!join from=#{from_field} to=#{to_field}}%{field}:%{value}" new(field: field, value: value, template: template, quote_value: true) end
negative(field, value)
click to toggle source
Builds a query clause to filter where field does not have the given value.
# File lib/ddr/index/query_clause.rb, line 58 def negative(field, value) new(field: field, value: value, template: NEGATIVE_QUERY, quote_value: true) end
present(field)
click to toggle source
Builds a query clause to filter where field is present (i.e, has any value)
# File lib/ddr/index/query_clause.rb, line 63 def present(field) new(field: field, value: ANY_VALUE) end
quote(value)
click to toggle source
# File lib/ddr/index/query_clause.rb, line 33 def quote(value) # Derived from Blacklight::Solr::SearchBuilderBehavior#solr_param_quote unless value =~ /\A[a-zA-Z0-9$_\-\^]+\z/ QUOTE + value.gsub("'", "\\\\\'").gsub('"', "\\\\\"") + QUOTE else value end end
regexp(field, value)
click to toggle source
Builds a regular expression query clause
# File lib/ddr/index/query_clause.rb, line 105 def regexp(field, value) val = value.gsub(/\//, "\\/") new(field: field, value: val, template: REGEXP_QUERY) end
term(field, value)
click to toggle source
Builds a “term query” clause to filter where field contains value.
# File lib/ddr/index/query_clause.rb, line 100 def term(field, value) new(field: field, value: value, template: TERM_QUERY) end
unique_key(value)
click to toggle source
Builds a query clause to retrieve the index document by unique key.
# File lib/ddr/index/query_clause.rb, line 43 def unique_key(value) term(UniqueKeyField.instance, value) end
Also aliased as: id
where(field, value)
click to toggle source
# File lib/ddr/index/query_clause.rb, line 48 def where(field, value) values = Array(value) if values.size > 1 disjunction(field, values) else new(field: field, value: values.first, quote_value: true) end end
Public Instance Methods
quote(value)
click to toggle source
# File lib/ddr/index/query_clause.rb, line 28 def quote(value) self.class.quote(value) end
to_s()
click to toggle source
# File lib/ddr/index/query_clause.rb, line 24 def to_s template % { field: field, value: quote_value ? quote(value) : value } end