redis_search 0.0.1
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 +7 -0
- data/lib/redis_search.rb +63 -0
- 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
|
data/lib/redis_search.rb
ADDED
@@ -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: []
|