Class: Ddr::Index::QueryClause
- Inherits:
-
Object
- Object
- Ddr::Index::QueryClause
- Defined in:
- lib/ddr/index/query_clause.rb
Constant Summary collapse
- ANY_FIELD =
Field.new('*').freeze
- ANY_VALUE =
"[* TO *]"
- QUOTE =
'"'
- TERM_QUERY =
"{!term f=%{field}}%{value}"
- STANDARD_QUERY =
"%{field}:%{value}"
- NEGATIVE_QUERY =
"-%{field}:%{value}"
- DISJUNCTION =
"{!lucene q.op=OR df=%{field}}%{value}"
- REGEXP_QUERY =
"%{field}:/%{value}/"
Class Method Summary collapse
-
.absent(field) ⇒ Object
Builds a query clause to filter where field is NOT present (no values).
-
.before(field, value) ⇒ Object
(also: before_date_time)
Builds a query clause to filter where date field value is earlier than a date/time value.
-
.before_days(field, value) ⇒ Object
Builds a query clause to filter where date field value is earlier than a number of days before now.
-
.disjunction(field, values) ⇒ Object
Builds a query clause to filter where field contains at least one of a set of values.
-
.join(from:, to:, where:) ⇒ Object
Builds a Solr join clause.
-
.negative(field, value) ⇒ Object
Builds a query clause to filter where field does not have the given value.
-
.present(field) ⇒ Object
Builds a query clause to filter where field is present (i.e, has any value).
- .quote(value) ⇒ Object
-
.regexp(field, value) ⇒ Object
Builds a regular expression query clause.
-
.term(field, value) ⇒ Object
Builds a “term query” clause to filter where field contains value.
-
.unique_key(value) ⇒ Object
(also: id)
Builds a query clause to retrieve the index document by unique key.
- .where(field, value) ⇒ Object
Instance Method Summary collapse
Class Method Details
.absent(field) ⇒ Object
Builds a query clause to filter where field is NOT present (no values)
68 69 70 |
# 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) ⇒ Object Also known as: before_date_time
Builds a query clause to filter where date field value is earlier than a date/time value.
89 90 91 |
# 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 |
.before_days(field, value) ⇒ Object
Builds a query clause to filter where date field value is earlier than a number of days before now.
95 96 97 |
# 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) ⇒ Object
Builds a query clause to filter where field contains at least one of a set of values.
73 74 75 76 |
# 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:) ⇒ Object
Builds a Solr join clause
80 81 82 83 84 85 86 |
# 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) ⇒ Object
Builds a query clause to filter where field does not have the given value.
58 59 60 |
# 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) ⇒ Object
Builds a query clause to filter where field is present (i.e, has any value)
63 64 65 |
# File 'lib/ddr/index/query_clause.rb', line 63 def present(field) new(field: field, value: ANY_VALUE) end |
.quote(value) ⇒ Object
33 34 35 36 37 38 39 40 |
# 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) ⇒ Object
Builds a regular expression query clause
105 106 107 108 |
# 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) ⇒ Object
Builds a “term query” clause to filter where field contains value.
100 101 102 |
# 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) ⇒ Object Also known as: id
Builds a query clause to retrieve the index document by unique key.
43 44 45 |
# File 'lib/ddr/index/query_clause.rb', line 43 def unique_key(value) term(UniqueKeyField.instance, value) end |
.where(field, value) ⇒ Object
48 49 50 51 52 53 54 55 |
# 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 |
Instance Method Details
#quote(value) ⇒ Object
28 29 30 |
# File 'lib/ddr/index/query_clause.rb', line 28 def quote(value) self.class.quote(value) end |
#to_s ⇒ Object
24 25 26 |
# File 'lib/ddr/index/query_clause.rb', line 24 def to_s template % { field: field, value: quote_value ? quote(value) : value } end |