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}"
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.
-
.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
-
.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.
79 80 81 |
# File 'lib/ddr/index/query_clause.rb', line 79 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.
85 86 87 |
# File 'lib/ddr/index/query_clause.rb', line 85 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 |
.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 |
.term(field, value) ⇒ Object
Builds a “term query” clause to filter where field contains value.
90 91 92 |
# File 'lib/ddr/index/query_clause.rb', line 90 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
27 28 29 |
# File 'lib/ddr/index/query_clause.rb', line 27 def quote(value) self.class.quote(value) end |
#to_s ⇒ Object
23 24 25 |
# File 'lib/ddr/index/query_clause.rb', line 23 def to_s template % { field: field, value: quote_value ? quote(value) : value } end |