mm_es_search 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/.gitignore +4 -0
  2. data/.project +18 -0
  3. data/Gemfile +4 -0
  4. data/Rakefile +1 -0
  5. data/lib/mm_es_search/api/facet/abstract_facet.rb +28 -0
  6. data/lib/mm_es_search/api/facet/date_histogram_facet.rb +11 -0
  7. data/lib/mm_es_search/api/facet/filter_facet.rb +9 -0
  8. data/lib/mm_es_search/api/facet/geo_distance_facet.rb +9 -0
  9. data/lib/mm_es_search/api/facet/histogram_facet.rb +9 -0
  10. data/lib/mm_es_search/api/facet/query_facet.rb +9 -0
  11. data/lib/mm_es_search/api/facet/range_facet.rb +36 -0
  12. data/lib/mm_es_search/api/facet/range_facet_row.rb +97 -0
  13. data/lib/mm_es_search/api/facet/range_item.rb +17 -0
  14. data/lib/mm_es_search/api/facet/statistical_facet.rb +33 -0
  15. data/lib/mm_es_search/api/facet/statistical_facet_result.rb +36 -0
  16. data/lib/mm_es_search/api/facet/terms_facet.rb +62 -0
  17. data/lib/mm_es_search/api/facet/terms_facet_row.rb +35 -0
  18. data/lib/mm_es_search/api/facet/terms_stats_facet.rb +9 -0
  19. data/lib/mm_es_search/api/highlight/result_highlight.rb +40 -0
  20. data/lib/mm_es_search/api/query/abstract_filter.rb +15 -0
  21. data/lib/mm_es_search/api/query/abstract_query.rb +48 -0
  22. data/lib/mm_es_search/api/query/and_filter.rb +9 -0
  23. data/lib/mm_es_search/api/query/bool_filter.rb +11 -0
  24. data/lib/mm_es_search/api/query/bool_query.rb +67 -0
  25. data/lib/mm_es_search/api/query/constant_score_query.rb +31 -0
  26. data/lib/mm_es_search/api/query/custom_filters_score_query.rb +52 -0
  27. data/lib/mm_es_search/api/query/custom_score_query.rb +31 -0
  28. data/lib/mm_es_search/api/query/dismax_query.rb +29 -0
  29. data/lib/mm_es_search/api/query/filtered_query.rb +30 -0
  30. data/lib/mm_es_search/api/query/has_child_filter.rb +11 -0
  31. data/lib/mm_es_search/api/query/has_child_query.rb +25 -0
  32. data/lib/mm_es_search/api/query/has_parent_filter.rb +11 -0
  33. data/lib/mm_es_search/api/query/has_parent_query.rb +25 -0
  34. data/lib/mm_es_search/api/query/match_all_filter.rb +11 -0
  35. data/lib/mm_es_search/api/query/match_all_query.rb +19 -0
  36. data/lib/mm_es_search/api/query/nested_filter.rb +22 -0
  37. data/lib/mm_es_search/api/query/nested_query.rb +62 -0
  38. data/lib/mm_es_search/api/query/not_filter.rb +9 -0
  39. data/lib/mm_es_search/api/query/or_filter.rb +9 -0
  40. data/lib/mm_es_search/api/query/prefix_filter.rb +11 -0
  41. data/lib/mm_es_search/api/query/prefix_query.rb +34 -0
  42. data/lib/mm_es_search/api/query/query_filter.rb +28 -0
  43. data/lib/mm_es_search/api/query/query_string_query.rb +37 -0
  44. data/lib/mm_es_search/api/query/range_filter.rb +11 -0
  45. data/lib/mm_es_search/api/query/range_query.rb +57 -0
  46. data/lib/mm_es_search/api/query/scored_filter.rb +29 -0
  47. data/lib/mm_es_search/api/query/single_bool_filter.rb +66 -0
  48. data/lib/mm_es_search/api/query/term_filter.rb +11 -0
  49. data/lib/mm_es_search/api/query/term_query.rb +34 -0
  50. data/lib/mm_es_search/api/query/terms_filter.rb +11 -0
  51. data/lib/mm_es_search/api/query/terms_query.rb +58 -0
  52. data/lib/mm_es_search/api/query/text_query.rb +42 -0
  53. data/lib/mm_es_search/api/query/top_children_query.rb +28 -0
  54. data/lib/mm_es_search/api/sort/root_sort.rb +36 -0
  55. data/lib/mm_es_search/models/abstract_facet_model.rb +23 -0
  56. data/lib/mm_es_search/models/abstract_query_model.rb +21 -0
  57. data/lib/mm_es_search/models/abstract_range_facet_model.rb +365 -0
  58. data/lib/mm_es_search/models/abstract_search_model.OLD +538 -0
  59. data/lib/mm_es_search/models/abstract_search_model.rb +521 -0
  60. data/lib/mm_es_search/models/abstract_sort_model.rb +13 -0
  61. data/lib/mm_es_search/models/abstract_terms_facet_model.rb +87 -0
  62. data/lib/mm_es_search/models/root_sort_model.rb +20 -0
  63. data/lib/mm_es_search/models/virtual_field_sort.rb +52 -0
  64. data/lib/mm_es_search/utils/facet_row_utils.rb +86 -0
  65. data/lib/mm_es_search/utils/search_logger.rb +10 -0
  66. data/lib/mm_es_search/version.rb +3 -0
  67. data/lib/mm_es_search.rb +124 -0
  68. data/mm_es_search.gemspec +24 -0
  69. metadata +132 -0
@@ -0,0 +1,86 @@
1
+ module MmEsSearch
2
+ module Utils
3
+
4
+ module FacetRowUtils
5
+
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ key :show_missing, Boolean
10
+ end
11
+
12
+ def required?
13
+ required
14
+ end
15
+
16
+ def used_or_required?
17
+ used? || required?
18
+ end
19
+
20
+ def used?
21
+ checked_rows.any? || show_missing
22
+ end
23
+
24
+ def unused?
25
+ !used?
26
+ end
27
+
28
+ def find_row_by_params(params)
29
+ rows.detect do |row|
30
+ required_row_fields.all? {|field| row[field] == params[field]}
31
+ end
32
+ end
33
+
34
+ def checked_rows
35
+ return [] if rows.empty?
36
+ rows.select {|row| row.checked?}
37
+ end
38
+
39
+ def positively_checked_rows
40
+ return [] if rows.empty?
41
+ rows.select {|row| ["and", "or"].include?(row.checked)}
42
+ end
43
+
44
+ def rows_checked_and
45
+ return [] if rows.empty?
46
+ rows.select {|row| row.checked == 'and'}
47
+ end
48
+
49
+ def rows_checked_or
50
+ return [] if rows.empty?
51
+ rows.select {|row| row.checked == 'or'}
52
+ end
53
+
54
+ def rows_checked_not
55
+ return [] if rows.empty?
56
+ rows.select {|row| row.checked == 'not'}
57
+ end
58
+
59
+ def unchecked_rows
60
+ return [] if rows.empty?
61
+ rows.select {|row| row.checked? == false}
62
+ end
63
+
64
+ def to_filter
65
+
66
+ if show_missing
67
+ build_filter
68
+ else
69
+ used_rows = checked_rows
70
+ return nil if used_rows.empty?
71
+
72
+ and_array = get_checked_row_params('and')
73
+ or_array = get_checked_row_params('or')
74
+ not_array = get_checked_row_params('not')
75
+ build_filter(and_array, or_array, not_array)
76
+ end
77
+
78
+ end
79
+
80
+ def get_checked_row_params(check_mark)
81
+ checked_rows.select {|row| row.checked == check_mark} .map {|row| row.attributes.only(*required_row_fields)}
82
+ end
83
+
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,10 @@
1
+ module MmEsSearch
2
+ module Utils
3
+ class SearchLogger < Logger
4
+ def format_message(severity, timestamp, progname, msg)
5
+ "#{timestamp.to_formatted_s(:db)} #{severity}\n#{msg}\n"
6
+ end
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,3 @@
1
+ module MmEsSearch
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,124 @@
1
+ require_relative "mm_es_search/version"
2
+ require 'active_support/core_ext'
3
+
4
+ module MmEsSearch
5
+
6
+ def self.root
7
+ @root ||= File.expand_path(File.dirname(__FILE__))
8
+ end
9
+
10
+ def self.smart_load(path)
11
+
12
+ unless @load_mode_detected
13
+ if @dev_mode = defined?(Rails) and Rails.env == "development"
14
+ ActiveSupport::Dependencies.autoload_paths << root
15
+ ActiveSupport::Dependencies.explicitly_unloadable_constants << 'MmEsSearch'
16
+ end
17
+ @load_mode_detected = true
18
+ end
19
+
20
+ full_path = File.join(root, "#{path}.rb")
21
+
22
+ if @dev_mode
23
+ load full_path
24
+ else
25
+ require full_path
26
+ end
27
+
28
+ end
29
+
30
+ smart_load "mm_es_search/utils/search_logger"
31
+ smart_load "mm_es_search/utils/facet_row_utils"
32
+
33
+ smart_load "mm_es_search/api/query/abstract_query"
34
+ smart_load "mm_es_search/api/query/bool_query"
35
+ smart_load "mm_es_search/api/query/constant_score_query"
36
+ smart_load "mm_es_search/api/query/custom_filters_score_query"
37
+ smart_load "mm_es_search/api/query/custom_score_query"
38
+ smart_load "mm_es_search/api/query/dismax_query"
39
+ smart_load "mm_es_search/api/query/filtered_query"
40
+ smart_load "mm_es_search/api/query/has_child_query"
41
+ smart_load "mm_es_search/api/query/has_parent_query"
42
+ smart_load "mm_es_search/api/query/match_all_query"
43
+ smart_load "mm_es_search/api/query/nested_query"
44
+ smart_load "mm_es_search/api/query/prefix_query"
45
+ smart_load "mm_es_search/api/query/query_string_query"
46
+ smart_load "mm_es_search/api/query/range_query"
47
+ smart_load "mm_es_search/api/query/term_query"
48
+ smart_load "mm_es_search/api/query/terms_query"
49
+ smart_load "mm_es_search/api/query/text_query"
50
+ smart_load "mm_es_search/api/query/top_children_query"
51
+
52
+ smart_load "mm_es_search/api/query/abstract_filter"
53
+ smart_load "mm_es_search/api/query/single_bool_filter"
54
+
55
+ smart_load "mm_es_search/api/query/and_filter"
56
+ smart_load "mm_es_search/api/query/bool_filter"
57
+ smart_load "mm_es_search/api/query/has_child_filter"
58
+ smart_load "mm_es_search/api/query/has_parent_filter"
59
+ smart_load "mm_es_search/api/query/match_all_filter"
60
+ smart_load "mm_es_search/api/query/nested_filter"
61
+ smart_load "mm_es_search/api/query/not_filter"
62
+ smart_load "mm_es_search/api/query/or_filter"
63
+ smart_load "mm_es_search/api/query/prefix_filter"
64
+ smart_load "mm_es_search/api/query/query_filter"
65
+ smart_load "mm_es_search/api/query/range_filter"
66
+ smart_load "mm_es_search/api/query/scored_filter"
67
+ smart_load "mm_es_search/api/query/term_filter"
68
+ smart_load "mm_es_search/api/query/terms_filter"
69
+
70
+ smart_load "mm_es_search/api/facet/terms_facet_row"
71
+ smart_load "mm_es_search/api/facet/abstract_facet"
72
+ smart_load "mm_es_search/api/facet/date_histogram_facet"
73
+ smart_load "mm_es_search/api/facet/filter_facet"
74
+ smart_load "mm_es_search/api/facet/geo_distance_facet"
75
+ smart_load "mm_es_search/api/facet/histogram_facet"
76
+ smart_load "mm_es_search/api/facet/query_facet"
77
+ smart_load "mm_es_search/api/facet/range_facet"
78
+ smart_load "mm_es_search/api/facet/range_facet_row"
79
+ smart_load "mm_es_search/api/facet/range_item"
80
+ smart_load "mm_es_search/api/facet/statistical_facet"
81
+ smart_load "mm_es_search/api/facet/statistical_facet_result"
82
+ smart_load "mm_es_search/api/facet/terms_facet"
83
+ smart_load "mm_es_search/api/facet/terms_stats_facet"
84
+
85
+ smart_load "mm_es_search/api/sort/root_sort"
86
+
87
+ smart_load "mm_es_search/api/highlight/result_highlight"
88
+
89
+ smart_load "mm_es_search/models/abstract_facet_model"
90
+ smart_load "mm_es_search/models/abstract_query_model"
91
+ smart_load "mm_es_search/models/abstract_range_facet_model"
92
+ smart_load "mm_es_search/models/abstract_search_model"
93
+ smart_load "mm_es_search/models/abstract_sort_model"
94
+ smart_load "mm_es_search/models/abstract_terms_facet_model"
95
+ smart_load "mm_es_search/models/root_sort_model"
96
+ smart_load "mm_es_search/models/virtual_field_sort"
97
+
98
+ def self.directories
99
+ [
100
+ "mm_es_search/utils",
101
+ "mm_es_search/api/query",
102
+ "mm_es_search/api/facet",
103
+ "mm_es_search/api/sort",
104
+ "mm_es_search/api/highlight",
105
+ "mm_es_search/models"
106
+ ]
107
+ end
108
+
109
+ def self.each_file
110
+
111
+ directories.each do |dir, array|
112
+ dir_constants = dir.split('/').map(&:classify)
113
+ Dir[File.join(root, dir, "**/*.rb")].sort.each do |fname|
114
+ basename = File.basename(fname, '.rb')
115
+ constant = basename.classify.to_sym
116
+ qualified_constant = (dir_constants + [constant]).join('::')
117
+ path = fname.chomp File.extname(fname)
118
+ yield qualified_constant, constant, fname, path, basename
119
+ end
120
+ end
121
+
122
+ end
123
+
124
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mm_es_search/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mm_es_search"
7
+ s.version = MmEsSearch::VERSION
8
+ s.authors = ["Jonathan Chambers"]
9
+ s.email = ["j.chambers@gmx.net"]
10
+ s.homepage = "https://github.com/jmchambers/mm_es_search"
11
+ s.summary = %q{Tools to build a mongomapper model that stores and executes complex elasticsearch queries.}
12
+ s.description = %q{Provides modules that can form the basis of a mongomapper class implementing a search model.}
13
+
14
+ s.rubyforge_project = "mm_es_search"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mm_es_search
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Jonathan Chambers
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-12-21 00:00:00 +00:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Provides modules that can form the basis of a mongomapper class implementing a search model.
22
+ email:
23
+ - j.chambers@gmx.net
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - .gitignore
32
+ - .project
33
+ - Gemfile
34
+ - Rakefile
35
+ - lib/mm_es_search.rb
36
+ - lib/mm_es_search/api/facet/abstract_facet.rb
37
+ - lib/mm_es_search/api/facet/date_histogram_facet.rb
38
+ - lib/mm_es_search/api/facet/filter_facet.rb
39
+ - lib/mm_es_search/api/facet/geo_distance_facet.rb
40
+ - lib/mm_es_search/api/facet/histogram_facet.rb
41
+ - lib/mm_es_search/api/facet/query_facet.rb
42
+ - lib/mm_es_search/api/facet/range_facet.rb
43
+ - lib/mm_es_search/api/facet/range_facet_row.rb
44
+ - lib/mm_es_search/api/facet/range_item.rb
45
+ - lib/mm_es_search/api/facet/statistical_facet.rb
46
+ - lib/mm_es_search/api/facet/statistical_facet_result.rb
47
+ - lib/mm_es_search/api/facet/terms_facet.rb
48
+ - lib/mm_es_search/api/facet/terms_facet_row.rb
49
+ - lib/mm_es_search/api/facet/terms_stats_facet.rb
50
+ - lib/mm_es_search/api/highlight/result_highlight.rb
51
+ - lib/mm_es_search/api/query/abstract_filter.rb
52
+ - lib/mm_es_search/api/query/abstract_query.rb
53
+ - lib/mm_es_search/api/query/and_filter.rb
54
+ - lib/mm_es_search/api/query/bool_filter.rb
55
+ - lib/mm_es_search/api/query/bool_query.rb
56
+ - lib/mm_es_search/api/query/constant_score_query.rb
57
+ - lib/mm_es_search/api/query/custom_filters_score_query.rb
58
+ - lib/mm_es_search/api/query/custom_score_query.rb
59
+ - lib/mm_es_search/api/query/dismax_query.rb
60
+ - lib/mm_es_search/api/query/filtered_query.rb
61
+ - lib/mm_es_search/api/query/has_child_filter.rb
62
+ - lib/mm_es_search/api/query/has_child_query.rb
63
+ - lib/mm_es_search/api/query/has_parent_filter.rb
64
+ - lib/mm_es_search/api/query/has_parent_query.rb
65
+ - lib/mm_es_search/api/query/match_all_filter.rb
66
+ - lib/mm_es_search/api/query/match_all_query.rb
67
+ - lib/mm_es_search/api/query/nested_filter.rb
68
+ - lib/mm_es_search/api/query/nested_query.rb
69
+ - lib/mm_es_search/api/query/not_filter.rb
70
+ - lib/mm_es_search/api/query/or_filter.rb
71
+ - lib/mm_es_search/api/query/prefix_filter.rb
72
+ - lib/mm_es_search/api/query/prefix_query.rb
73
+ - lib/mm_es_search/api/query/query_filter.rb
74
+ - lib/mm_es_search/api/query/query_string_query.rb
75
+ - lib/mm_es_search/api/query/range_filter.rb
76
+ - lib/mm_es_search/api/query/range_query.rb
77
+ - lib/mm_es_search/api/query/scored_filter.rb
78
+ - lib/mm_es_search/api/query/single_bool_filter.rb
79
+ - lib/mm_es_search/api/query/term_filter.rb
80
+ - lib/mm_es_search/api/query/term_query.rb
81
+ - lib/mm_es_search/api/query/terms_filter.rb
82
+ - lib/mm_es_search/api/query/terms_query.rb
83
+ - lib/mm_es_search/api/query/text_query.rb
84
+ - lib/mm_es_search/api/query/top_children_query.rb
85
+ - lib/mm_es_search/api/sort/root_sort.rb
86
+ - lib/mm_es_search/models/abstract_facet_model.rb
87
+ - lib/mm_es_search/models/abstract_query_model.rb
88
+ - lib/mm_es_search/models/abstract_range_facet_model.rb
89
+ - lib/mm_es_search/models/abstract_search_model.OLD
90
+ - lib/mm_es_search/models/abstract_search_model.rb
91
+ - lib/mm_es_search/models/abstract_sort_model.rb
92
+ - lib/mm_es_search/models/abstract_terms_facet_model.rb
93
+ - lib/mm_es_search/models/root_sort_model.rb
94
+ - lib/mm_es_search/models/virtual_field_sort.rb
95
+ - lib/mm_es_search/utils/facet_row_utils.rb
96
+ - lib/mm_es_search/utils/search_logger.rb
97
+ - lib/mm_es_search/version.rb
98
+ - mm_es_search.gemspec
99
+ has_rdoc: true
100
+ homepage: https://github.com/jmchambers/mm_es_search
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options: []
105
+
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ segments:
122
+ - 0
123
+ version: "0"
124
+ requirements: []
125
+
126
+ rubyforge_project: mm_es_search
127
+ rubygems_version: 1.3.7
128
+ signing_key:
129
+ specification_version: 3
130
+ summary: Tools to build a mongomapper model that stores and executes complex elasticsearch queries.
131
+ test_files: []
132
+