redis_search 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/redis_search.rb +63 -0
  3. metadata +84 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bb2c35bc0471b0a2e3ab4282c57e7221049e786a
4
+ data.tar.gz: 7b54575274ab5f60b5abd871fc38652174f2f591
5
+ SHA512:
6
+ metadata.gz: 99e444f0ac62d70eb14c7e938617809e5a67384131e862649d97cb7c8e9fbbaa34d374e93019b7629432f54e1a393fc3bd1841d9008d43bdb99c854da55e68d0
7
+ data.tar.gz: 0db47498e3faccb298de4f170f823bba88708b2743b041a923750d76892ee58c95a526d6eccbb2fbf63b52c06edab4bc6cba71fd8c04a4ede912ee30c812e94e
@@ -0,0 +1,63 @@
1
+ require 'set'
2
+
3
+ class RedisSearch
4
+ attr_reader :redis, :namespace
5
+
6
+ # Public: Instantiate a new RedisSearch instance.
7
+ #
8
+ # opts - A Hash of options.
9
+ # :redis - A Redis instance.
10
+ # :namespace - The String namespace for Redis keys.
11
+ #
12
+ # Returns nothing.
13
+ def initialize(opts = {})
14
+ @redis = opts[:redis]
15
+ @namespace = opts[:namespace]
16
+ end
17
+
18
+ # Public: Index a document.
19
+ #
20
+ # id - The ID of the document.
21
+ # doc - The String document to index.
22
+ #
23
+ # Returns nothing.
24
+ def index(id, doc)
25
+ redis.pipelined do
26
+ tokens(doc).uniq.each do |token|
27
+ redis.lpush key(token), id
28
+ end
29
+ end
30
+ end
31
+
32
+ # Public: Search for a document.
33
+ #
34
+ # query - The String query.
35
+ #
36
+ # Returns an Array of matching document IDs.
37
+ def search(query)
38
+ redis.pipelined do
39
+ tokens(query).uniq.each do |token|
40
+ redis.lrange(key(token), 0, -1)
41
+ end
42
+ end.flatten.uniq
43
+ end
44
+
45
+ private
46
+ # Private: Namespace a Redis key.
47
+ #
48
+ # token - The token to namespace.
49
+ #
50
+ # Returns a String.
51
+ def key(token)
52
+ [namespace, token].compact.join(':')
53
+ end
54
+
55
+ # Private: Tokenize a document or query.
56
+ #
57
+ # string - The String to tokenize.
58
+ #
59
+ # Returns an Array of String tokens.
60
+ def tokens(string)
61
+ string.scan(/\w+/)
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redis_search
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - TheWorldsBestDeveloper
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.3.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.3.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: redis
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.2.1
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.2'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.2.1
53
+ description:
54
+ email:
55
+ executables: []
56
+ extensions: []
57
+ extra_rdoc_files: []
58
+ files:
59
+ - lib/redis_search.rb
60
+ homepage:
61
+ licenses:
62
+ - MIT
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubyforge_project:
80
+ rubygems_version: 2.2.3
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: A dead simple search engine backed by Redis
84
+ test_files: []