solrbee 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/Makefile +1 -6
- data/README.md +1 -11
- data/config/api.yml +22 -45
- data/lib/rom/solr.rb +40 -11
- data/lib/{solrbee → rom/solr}/array.rb +0 -0
- data/lib/rom/solr/commands.rb +17 -0
- data/lib/rom/solr/commands/create_documents.rb +15 -0
- data/lib/rom/solr/commands/delete_documents.rb +15 -0
- data/lib/rom/solr/commands/delete_documents_by_query.rb +15 -0
- data/lib/rom/solr/commands/update_documents.rb +15 -0
- data/lib/rom/solr/dataset.rb +33 -54
- data/lib/rom/solr/document_repo.rb +33 -0
- data/lib/rom/solr/documents_dataset.rb +12 -0
- data/lib/rom/solr/gateway.rb +2 -13
- data/lib/rom/solr/relation.rb +22 -8
- data/lib/rom/solr/relations/documents_relation.rb +160 -0
- data/lib/rom/solr/relations/schema_info_relation.rb +100 -0
- data/lib/rom/solr/repository.rb +9 -0
- data/lib/rom/solr/request_handler.rb +52 -0
- data/lib/rom/solr/{response.rb → response_handler.rb} +2 -2
- data/lib/rom/solr/schema.rb +1 -3
- data/lib/rom/solr/schema_info_dataset.rb +11 -0
- data/lib/rom/solr/schema_info_repo.rb +45 -0
- data/lib/rom/solr/select_cursor.rb +56 -0
- data/lib/solrbee.rb +12 -23
- data/lib/solrbee/version.rb +1 -1
- data/solrbee.gemspec +0 -1
- data/test.sh +14 -0
- metadata +19 -24
- data/lib/rom/solr/datasets/select_dataset.rb +0 -53
- data/lib/rom/solr/paginated_dataset.rb +0 -62
- data/lib/rom/solr/relations/schema_relation.rb +0 -75
- data/lib/rom/solr/relations/select_relation.rb +0 -43
- data/lib/rom/solr/request.rb +0 -24
- data/lib/rom/solr/schemaless.rb +0 -24
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
module ROM
|
4
|
+
module Solr
|
5
|
+
#
|
6
|
+
# Wraps a DocumentsDataset to provide pagination with a cursor.
|
7
|
+
#
|
8
|
+
class SelectCursor < SimpleDelegator
|
9
|
+
|
10
|
+
def initialize(dataset)
|
11
|
+
params = { cursorMark: '*' }
|
12
|
+
|
13
|
+
# Sort must include a sort on unique key (id).
|
14
|
+
sort = dataset.params[:sort]
|
15
|
+
unless /\bid\b/ =~ sort
|
16
|
+
params[:sort] = Array.wrap(sort).append('id ASC').join(',')
|
17
|
+
end
|
18
|
+
|
19
|
+
super dataset.add_params(params)
|
20
|
+
end
|
21
|
+
|
22
|
+
def each(&block)
|
23
|
+
return to_enum unless block_given?
|
24
|
+
|
25
|
+
while true
|
26
|
+
__getobj__.each(&block)
|
27
|
+
|
28
|
+
break if last_page?
|
29
|
+
|
30
|
+
move_cursor
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def cursor_mark
|
35
|
+
params[:cursorMark]
|
36
|
+
end
|
37
|
+
|
38
|
+
def next_cursor_mark
|
39
|
+
response[:nextCursorMark]
|
40
|
+
end
|
41
|
+
|
42
|
+
def last_page?
|
43
|
+
cursor_mark == next_cursor_mark
|
44
|
+
end
|
45
|
+
|
46
|
+
def move_cursor
|
47
|
+
__setobj__(next_page)
|
48
|
+
end
|
49
|
+
|
50
|
+
def next_page
|
51
|
+
__getobj__.add_params(cursorMark: next_cursor_mark)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/solrbee.rb
CHANGED
@@ -1,39 +1,28 @@
|
|
1
1
|
require "solrbee/version"
|
2
|
-
|
2
|
+
|
3
3
|
require "rom/solr"
|
4
4
|
|
5
5
|
module Solrbee
|
6
6
|
|
7
|
-
|
8
|
-
#
|
9
|
-
# @return [ROM::Solr::Gateway] a gateway instance
|
10
|
-
def self.gateway
|
11
|
-
ROM::Gateway.setup(:solr)
|
12
|
-
end
|
7
|
+
DEFAULT_URI = ENV.fetch('SOLR_URL', 'http://localhost:8983/solr').freeze
|
13
8
|
|
14
|
-
# Factory method
|
15
|
-
#
|
16
|
-
# @return [Solrbee::Documents] a ROM relation for searching
|
17
9
|
def self.documents
|
18
|
-
container
|
10
|
+
ROM::Solr::DocumentRepo.new(container)
|
19
11
|
end
|
20
12
|
|
21
|
-
def self.
|
22
|
-
container
|
13
|
+
def self.schema_info
|
14
|
+
ROM::Solr::SchemaInfoRepo.new(container)
|
23
15
|
end
|
24
16
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
ROM::Solr
|
30
|
-
ROM::Solr::SchemaRelation
|
17
|
+
def self.container(uri: DEFAULT_URI)
|
18
|
+
ROM.container(:solr, uri: uri) do |config|
|
19
|
+
config.auto_registration(
|
20
|
+
File.expand_path('../rom/solr/', __FILE__),
|
21
|
+
namespace: 'ROM::Solr'
|
31
22
|
)
|
32
|
-
end
|
33
|
-
end
|
34
23
|
|
35
|
-
|
36
|
-
|
24
|
+
yield config if block_given?
|
25
|
+
end
|
37
26
|
end
|
38
27
|
|
39
28
|
end
|
data/lib/solrbee/version.rb
CHANGED
data/solrbee.gemspec
CHANGED
data/test.sh
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
docker run --rm -d -p 8983:8983 --name solrbee-test solr:8 solr-precreate solrbee
|
4
|
+
|
5
|
+
while ! curl -fs http://localhost:8983/solr/solrbee/admin/ping 2>/dev/null ;
|
6
|
+
do sleep 1
|
7
|
+
done
|
8
|
+
|
9
|
+
SOLR_URL=http://localhost:8983/solr/solrbee bundle exec rake
|
10
|
+
code=$?
|
11
|
+
|
12
|
+
docker stop solrbee-test
|
13
|
+
|
14
|
+
exit $code
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solrbee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Chandek-Stark
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: hashie
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rom
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,21 +112,30 @@ files:
|
|
126
112
|
- bin/setup
|
127
113
|
- config/api.yml
|
128
114
|
- lib/rom/solr.rb
|
115
|
+
- lib/rom/solr/array.rb
|
116
|
+
- lib/rom/solr/commands.rb
|
117
|
+
- lib/rom/solr/commands/create_documents.rb
|
118
|
+
- lib/rom/solr/commands/delete_documents.rb
|
119
|
+
- lib/rom/solr/commands/delete_documents_by_query.rb
|
120
|
+
- lib/rom/solr/commands/update_documents.rb
|
129
121
|
- lib/rom/solr/dataset.rb
|
130
|
-
- lib/rom/solr/
|
122
|
+
- lib/rom/solr/document_repo.rb
|
123
|
+
- lib/rom/solr/documents_dataset.rb
|
131
124
|
- lib/rom/solr/gateway.rb
|
132
|
-
- lib/rom/solr/paginated_dataset.rb
|
133
125
|
- lib/rom/solr/relation.rb
|
134
|
-
- lib/rom/solr/relations/
|
135
|
-
- lib/rom/solr/relations/
|
136
|
-
- lib/rom/solr/
|
137
|
-
- lib/rom/solr/
|
126
|
+
- lib/rom/solr/relations/documents_relation.rb
|
127
|
+
- lib/rom/solr/relations/schema_info_relation.rb
|
128
|
+
- lib/rom/solr/repository.rb
|
129
|
+
- lib/rom/solr/request_handler.rb
|
130
|
+
- lib/rom/solr/response_handler.rb
|
138
131
|
- lib/rom/solr/schema.rb
|
139
|
-
- lib/rom/solr/
|
132
|
+
- lib/rom/solr/schema_info_dataset.rb
|
133
|
+
- lib/rom/solr/schema_info_repo.rb
|
134
|
+
- lib/rom/solr/select_cursor.rb
|
140
135
|
- lib/solrbee.rb
|
141
|
-
- lib/solrbee/array.rb
|
142
136
|
- lib/solrbee/version.rb
|
143
137
|
- solrbee.gemspec
|
138
|
+
- test.sh
|
144
139
|
homepage: https://github.com/dchandekstark/solrbee
|
145
140
|
licenses:
|
146
141
|
- MIT
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module ROM
|
2
|
-
module Solr
|
3
|
-
class SelectDataset < Dataset
|
4
|
-
|
5
|
-
config.default_enum_on = [ 'response', 'docs' ]
|
6
|
-
config.default_params = { q: '*:*', start: 0, rows: 20, cursorMark: '*', sort: 'id ASC' }
|
7
|
-
|
8
|
-
# @override
|
9
|
-
def each
|
10
|
-
while true
|
11
|
-
enumerable_response.each { |doc| yield(doc) }
|
12
|
-
break if last_page?
|
13
|
-
update_cursor_mark
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def num_found
|
18
|
-
response.dig('response', 'numFound')
|
19
|
-
end
|
20
|
-
|
21
|
-
def cursor_mark
|
22
|
-
params[:cursorMark]
|
23
|
-
end
|
24
|
-
|
25
|
-
def next_cursor_mark
|
26
|
-
response['nextCursorMark']
|
27
|
-
end
|
28
|
-
|
29
|
-
def page_size
|
30
|
-
params[:rows]
|
31
|
-
end
|
32
|
-
|
33
|
-
def last_cursor?
|
34
|
-
cursor_mark == next_cursor_mark
|
35
|
-
end
|
36
|
-
|
37
|
-
def one_page?
|
38
|
-
num_found <= page_size
|
39
|
-
end
|
40
|
-
|
41
|
-
def last_page?
|
42
|
-
one_page? || last_cursor?
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def update_cursor_mark
|
48
|
-
add_params(cursorMark: next_cursor_mark)
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
module ROM
|
2
|
-
module Solr
|
3
|
-
class PaginatedDataset
|
4
|
-
|
5
|
-
attr_reader :dataset
|
6
|
-
|
7
|
-
def initialize(dataset)
|
8
|
-
ds = dataset
|
9
|
-
.default_params(rows: 20)
|
10
|
-
.remove_params(:start)
|
11
|
-
.add_params(cursorMark: '*')
|
12
|
-
|
13
|
-
if ds.param?(:sort)
|
14
|
-
unless ds.params[:sort] =~ /\bid\b/
|
15
|
-
ds = ds.sort('%{sort},id ASC' % ds.params)
|
16
|
-
end
|
17
|
-
else
|
18
|
-
ds = ds.sort('id ASC')
|
19
|
-
end
|
20
|
-
|
21
|
-
@dataset = ds
|
22
|
-
end
|
23
|
-
|
24
|
-
def each
|
25
|
-
while true
|
26
|
-
yield dataset
|
27
|
-
break if last_page?
|
28
|
-
@dataset = dataset.add_params(cursorMark: next_cursor_mark)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def cursor_mark
|
33
|
-
dataset.params[:cursorMark]
|
34
|
-
end
|
35
|
-
|
36
|
-
def next_cursor_mark
|
37
|
-
dataset.response['nextCursorMark']
|
38
|
-
end
|
39
|
-
|
40
|
-
def page_size
|
41
|
-
dataset.params[:rows]
|
42
|
-
end
|
43
|
-
|
44
|
-
def total_size
|
45
|
-
dataset.num_found
|
46
|
-
end
|
47
|
-
|
48
|
-
def last_cursor?
|
49
|
-
cursor_mark == next_cursor_mark
|
50
|
-
end
|
51
|
-
|
52
|
-
def one_page?
|
53
|
-
total_size <= page_size
|
54
|
-
end
|
55
|
-
|
56
|
-
def last_page?
|
57
|
-
one_page? || last_cursor?
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
module ROM
|
2
|
-
module Solr
|
3
|
-
class SchemaRelation < Relation
|
4
|
-
|
5
|
-
schemaless(:schema, as: :schema_info)
|
6
|
-
|
7
|
-
# GET /schema
|
8
|
-
def info
|
9
|
-
fetch('schema')
|
10
|
-
end
|
11
|
-
|
12
|
-
def schema_name
|
13
|
-
with_path(:name).fetch(:name)
|
14
|
-
end
|
15
|
-
|
16
|
-
def version
|
17
|
-
with_path('version').fetch('version')
|
18
|
-
end
|
19
|
-
|
20
|
-
def unique_key
|
21
|
-
with_path('uniquekey').fetch('uniqueKey')
|
22
|
-
end
|
23
|
-
|
24
|
-
def similarity
|
25
|
-
with_path('similarity').fetch('similarity')
|
26
|
-
end
|
27
|
-
|
28
|
-
# @param opts [Hash]
|
29
|
-
def fields(**opts)
|
30
|
-
default_opts = { showDefaults: true }
|
31
|
-
with_path('fields')
|
32
|
-
.with_enum_on('fields')
|
33
|
-
.add_params(default_opts.merge(opts))
|
34
|
-
end
|
35
|
-
|
36
|
-
# @param name [String, Symbol] field name
|
37
|
-
# @param opts [Hash]
|
38
|
-
def field(name, **opts)
|
39
|
-
with_path('fields', name)
|
40
|
-
.add_params(opts)
|
41
|
-
.fetch('field')
|
42
|
-
end
|
43
|
-
|
44
|
-
# @param opts [Hash]
|
45
|
-
def field_types(**opts)
|
46
|
-
with_path('fieldtypes')
|
47
|
-
.with_enum_on('fieldTypes')
|
48
|
-
.add_params(opts)
|
49
|
-
end
|
50
|
-
|
51
|
-
# @param name [String, Symbol] field type name
|
52
|
-
# @param opts [Hash]
|
53
|
-
def field_type(name, **opts)
|
54
|
-
with_path('fieldtypes', name).add_params(opts).fetch('fieldType')
|
55
|
-
end
|
56
|
-
|
57
|
-
# @param opts [Hash]
|
58
|
-
def dynamic_fields(**opts)
|
59
|
-
with_path('dynamicfields').with_enum_on('dynamicFields').add_params(opts)
|
60
|
-
end
|
61
|
-
|
62
|
-
# @param name [String, Symbol] dynamic field name
|
63
|
-
# @param opts [Hash]
|
64
|
-
def dynamic_field(name, **opts)
|
65
|
-
with_path('dynamicfields', name).add_params(opts).fetch('dynamicField')
|
66
|
-
end
|
67
|
-
|
68
|
-
# @param opts [Hash]
|
69
|
-
def copy_fields(**opts)
|
70
|
-
with_path('copyfields').with_enum_on('copyFields').add_params(opts)
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module ROM
|
2
|
-
module Solr
|
3
|
-
class SelectRelation < Relation
|
4
|
-
|
5
|
-
schemaless :select, as: :search
|
6
|
-
|
7
|
-
def filter(*fq)
|
8
|
-
add_param_values(:fq, fq)
|
9
|
-
end
|
10
|
-
alias_method :fq, :filter
|
11
|
-
|
12
|
-
def query(q)
|
13
|
-
add_params(q: q)
|
14
|
-
end
|
15
|
-
alias_method :q, :query
|
16
|
-
|
17
|
-
def fields(*fl)
|
18
|
-
add_params(fl: fl)
|
19
|
-
end
|
20
|
-
alias_method :fl, :fields
|
21
|
-
|
22
|
-
def start(offset)
|
23
|
-
add_params(start: offset.to_i)
|
24
|
-
end
|
25
|
-
alias_method :offset, :start
|
26
|
-
|
27
|
-
def rows(limit)
|
28
|
-
add_params(rows: limit.to_i)
|
29
|
-
end
|
30
|
-
alias_method :limit, :rows
|
31
|
-
|
32
|
-
def sort(crit)
|
33
|
-
add_params(sort: crit)
|
34
|
-
end
|
35
|
-
|
36
|
-
# @override Don't have to enumerate to get count (may not be exact)
|
37
|
-
def count
|
38
|
-
dataset.num_found
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|