Class: Xapit::AbstractIndexer
- Inherits:
-
Object
- Object
- Xapit::AbstractIndexer
show all
- Defined in:
- lib/xapit/indexers/abstract_indexer.rb
Instance Method Summary
collapse
Constructor Details
Returns a new instance of AbstractIndexer.
3
4
5
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 3
def initialize(blueprint)
@blueprint = blueprint
end
|
Instance Method Details
#add_member(member) ⇒ Object
7
8
9
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 7
def add_member(member)
database.add_document(document_for(member))
end
|
#base_terms(member) ⇒ Object
38
39
40
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 38
def base_terms(member)
["C#{member.class}", "Q#{member.class}-#{member.id}"]
end
|
#document_for(member) ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 11
def document_for(member)
document = Xapian::Document.new
document.data = "#{member.class}-#{member.id}"
index_text_attributes(member, document)
index_terms(other_terms(member), document)
values(member).each_with_index do |value, index|
document.add_value(index, value)
end
save_facet_options_for(member)
document
end
|
#facet_terms(member) ⇒ Object
55
56
57
58
59
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 55
def facet_terms(member)
@blueprint.facets.map do |facet|
facet.identifiers_for(member).map { |id| "F#{id}" }
end.flatten
end
|
#facet_values(member) ⇒ Object
83
84
85
86
87
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 83
def facet_values(member)
@blueprint.facets.map do |facet|
facet.identifiers_for(member).join("-")
end
end
|
#field_terms(member) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 42
def field_terms(member)
@blueprint.field_attributes.map do |name|
[member.send(name)].flatten.map do |value|
if value.kind_of? Time
value = value.to_i
elsif value.kind_of? Date
value = value.to_time.to_i
end
"X#{name}-#{value.to_s.downcase}"
end
end.flatten
end
|
#index_terms(terms, document) ⇒ Object
23
24
25
26
27
28
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 23
def index_terms(terms, document)
terms.each do |term|
document.add_term(term)
database.add_spelling(term) if Config.spelling?
end
end
|
#index_text_attributes(member, document) ⇒ Object
30
31
32
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 30
def index_text_attributes(member, document)
end
|
#other_terms(member) ⇒ Object
34
35
36
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 34
def other_terms(member)
base_terms(member) + field_terms(member) + facet_terms(member)
end
|
#save_facet_options_for(member) ⇒ Object
89
90
91
92
93
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 89
def save_facet_options_for(member)
@blueprint.facets.each do |facet|
facet.save_facet_options_for(member)
end
end
|
#sortable_values(member) ⇒ Object
77
78
79
80
81
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 77
def sortable_values(member)
@blueprint.sortable_attributes.map do |sortable|
member.send(sortable).to_s.downcase
end
end
|
#text_terms(member) ⇒ Object
used primarily by search similar functionality
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 62
def text_terms(member) @blueprint.text_attributes.map do |name, options|
content = member.send(name).to_s
if options[:proc]
options[:proc].call(content).reject(&:blank?).map(&:to_s).map(&:downcase)
else
content.scan(/\w+/u).map(&:downcase)
end
end.flatten
end
|
#values(member) ⇒ Object
73
74
75
|
# File 'lib/xapit/indexers/abstract_indexer.rb', line 73
def values(member)
facet_values(member) + sortable_values(member)
end
|