groonga 0.0.1 → 0.0.2
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.
- data/NEWS.ja.rdoc +11 -0
- data/NEWS.rdoc +11 -0
- data/README.ja.rdoc +4 -3
- data/README.rdoc +4 -3
- data/Rakefile +1 -1
- data/TUTORIAL.ja.rdoc +168 -44
- data/benchmark/common.rb +49 -0
- data/benchmark/read-write-small-many-items.rb +156 -0
- data/benchmark/write-small-many-items.rb +145 -0
- data/example/bookmark.rb +68 -20
- data/ext/rb-grn-array-cursor.c +8 -0
- data/ext/rb-grn-array.c +40 -11
- data/ext/rb-grn-column.c +38 -209
- data/ext/rb-grn-context.c +203 -56
- data/ext/rb-grn-database.c +119 -5
- data/ext/rb-grn-encoding-support.c +64 -0
- data/ext/rb-grn-encoding.c +58 -1
- data/ext/rb-grn-fix-size-column.c +220 -0
- data/ext/rb-grn-hash-cursor.c +8 -0
- data/ext/rb-grn-hash.c +244 -2
- data/ext/rb-grn-index-column.c +474 -0
- data/ext/rb-grn-object.c +143 -265
- data/ext/rb-grn-patricia-trie.c +148 -2
- data/ext/rb-grn-query.c +5 -3
- data/ext/rb-grn-record.c +3 -2
- data/ext/rb-grn-snippet.c +5 -3
- data/ext/rb-grn-table-cursor-key-support.c +3 -3
- data/ext/rb-grn-table-cursor.c +106 -112
- data/ext/rb-grn-table-key-support.c +220 -118
- data/ext/rb-grn-table.c +336 -80
- data/ext/rb-grn-type.c +5 -4
- data/ext/rb-grn-utils.c +62 -63
- data/ext/rb-grn.h +215 -14
- data/ext/rb-groonga.c +7 -16
- data/extconf.rb +3 -1
- data/html/favicon.ico +0 -0
- data/html/favicon.xcf +0 -0
- data/html/index.html +1 -7
- data/lib/groonga/record.rb +6 -1
- data/test/groonga-test-utils.rb +1 -0
- data/test/test-array.rb +81 -0
- data/test/test-column.rb +22 -12
- data/test/test-context.rb +1 -29
- data/test/test-database.rb +30 -0
- data/test/test-hash.rb +194 -0
- data/test/test-index-column.rb +57 -0
- data/test/test-patricia-trie.rb +82 -0
- data/test/test-record.rb +10 -10
- data/test/test-table.rb +37 -130
- data/test/test-type.rb +4 -3
- metadata +15 -4
- data/benchmark/small-many-items.rb +0 -175
data/lib/groonga/record.rb
CHANGED
@@ -18,9 +18,14 @@
|
|
18
18
|
module Groonga
|
19
19
|
class Record
|
20
20
|
attr_reader :table, :id
|
21
|
-
def initialize(table, id)
|
21
|
+
def initialize(table, id, values=nil)
|
22
22
|
@table = table
|
23
23
|
@id = id
|
24
|
+
if values
|
25
|
+
values.each do |name, value|
|
26
|
+
self[name] = value
|
27
|
+
end
|
28
|
+
end
|
24
29
|
end
|
25
30
|
|
26
31
|
def ==(other)
|
data/test/groonga-test-utils.rb
CHANGED
data/test/test-array.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License version 2.1 as published by the Free Software Foundation.
|
6
|
+
#
|
7
|
+
# This library is distributed in the hope that it will be useful,
|
8
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
+
# Lesser General Public License for more details.
|
11
|
+
#
|
12
|
+
# You should have received a copy of the GNU Lesser General Public
|
13
|
+
# License along with this library; if not, write to the Free Software
|
14
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
15
|
+
|
16
|
+
class ArrayTest < Test::Unit::TestCase
|
17
|
+
include GroongaTestUtils
|
18
|
+
|
19
|
+
setup :setup_database
|
20
|
+
|
21
|
+
def test_inspect_size
|
22
|
+
path = @tables_dir + "named.groonga"
|
23
|
+
contain_table = Groonga::Array.create(:name => "name", :path => path.to_s)
|
24
|
+
3.times do
|
25
|
+
contain_table.add
|
26
|
+
end
|
27
|
+
assert_equal("#<Groonga::Array " +
|
28
|
+
"id: <#{contain_table.id}>, " +
|
29
|
+
"name: <name>, " +
|
30
|
+
"path: <#{path}>, " +
|
31
|
+
"domain: <nil>, " +
|
32
|
+
"range: <nil>, " +
|
33
|
+
"size: <3>>",
|
34
|
+
contain_table.inspect)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_encoding
|
38
|
+
array = Groonga::Array.create
|
39
|
+
assert_false(array.respond_to?(:encoding))
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_add
|
43
|
+
users = Groonga::Array.create(:name => "<users>")
|
44
|
+
users.define_column("name", "<text>")
|
45
|
+
me = users.add(:name => "me")
|
46
|
+
assert_equal("me", me[:name])
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_define_index_column
|
50
|
+
users = Groonga::Array.create(:name => "<users>")
|
51
|
+
users.define_column("name", "<text>")
|
52
|
+
bookmarks = Groonga::Array.create(:name => "<bookmarks>")
|
53
|
+
bookmarks.define_column("title", "<text>")
|
54
|
+
bookmarks.define_column("user", users)
|
55
|
+
|
56
|
+
index = users.define_index_column("bookmarks", bookmarks,
|
57
|
+
:source => "<bookmarks>.user")
|
58
|
+
morita = users.add(:name => "morita")
|
59
|
+
gunyara_kun = users.add(:name => "gunyara-kun")
|
60
|
+
groonga = bookmarks.add(:title => "groonga", :user => morita)
|
61
|
+
google = bookmarks.add(:title => "google", :user => morita)
|
62
|
+
python = bookmarks.add(:title => "Python", :user => gunyara_kun)
|
63
|
+
|
64
|
+
assert_equal(["groonga", "google"],
|
65
|
+
index.search(morita.id).collect {|record| record.key["title"]})
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_create_duplicated_name
|
69
|
+
Groonga::Array.create(:name => "<users>")
|
70
|
+
assert_raise(Groonga::InvalidArgument) do
|
71
|
+
Groonga::Array.create(:name => "<users>")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_open_same_name
|
76
|
+
users_created = Groonga::Array.create(:name => "<users>")
|
77
|
+
users_opened = Groonga::Array.open(:name => "<users>")
|
78
|
+
users_opened.add
|
79
|
+
assert_equal(1, users_created.size)
|
80
|
+
end
|
81
|
+
end
|
data/test/test-column.rb
CHANGED
@@ -62,20 +62,20 @@ class ColumnTest < Test::Unit::TestCase
|
|
62
62
|
Groonga::PatriciaTrie.create(:name => "bookmarks-index",
|
63
63
|
:path => @bookmarks_index_path.to_s,
|
64
64
|
:key_type => "<shorttext>")
|
65
|
+
@bookmarks_index.default_tokenizer = "<token:bigram>"
|
66
|
+
|
65
67
|
@content_index_column_path = @columns_dir + "content-index"
|
66
68
|
@bookmarks_index_content =
|
67
|
-
@bookmarks_index.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
:path => @content_index_column_path.to_s)
|
69
|
+
@bookmarks_index.define_index_column("<index:content>", @bookmarks,
|
70
|
+
:with_section => true,
|
71
|
+
:with_weight => true,
|
72
|
+
:with_position => true,
|
73
|
+
:path => @content_index_column_path.to_s)
|
73
74
|
|
74
75
|
@uri_index_column_path = @columns_dir + "uri-index"
|
75
76
|
@bookmarks_index_uri =
|
76
|
-
@bookmarks_index.
|
77
|
-
|
78
|
-
:path => @uri_index_column_path.to_s)
|
77
|
+
@bookmarks_index.define_index_column("<index:uri>", @bookmarks,
|
78
|
+
:path => @uri_index_column_path.to_s)
|
79
79
|
end
|
80
80
|
|
81
81
|
def test_source_info
|
@@ -126,9 +126,9 @@ class ColumnTest < Test::Unit::TestCase
|
|
126
126
|
|
127
127
|
index = Groonga::PatriciaTrie.create(:name => "<terms>",
|
128
128
|
:key_type => "<shorttext>")
|
129
|
-
|
130
|
-
|
131
|
-
|
129
|
+
index.default_tokenizer = "<token:bigram>"
|
130
|
+
content_index = index.define_index_column("content_index", comments,
|
131
|
+
:with_position => true)
|
132
132
|
content_index.source = content
|
133
133
|
|
134
134
|
first_post = posts.add("Hello!")
|
@@ -176,6 +176,16 @@ class ColumnTest < Test::Unit::TestCase
|
|
176
176
|
assert_equal(@users, @users_name_column.table)
|
177
177
|
end
|
178
178
|
|
179
|
+
def test_array_set_with_key_of_table
|
180
|
+
users = Groonga::Hash.create(:name => "<users>")
|
181
|
+
bookmarks = Groonga::Hash.create(:name => "<bookmarks>")
|
182
|
+
bookmarks.define_column("user", users)
|
183
|
+
|
184
|
+
users.add("morita")
|
185
|
+
groonga = bookmarks.add("http://groonga.org/", :user => "morita")
|
186
|
+
assert_equal("morita", groonga[:user].key)
|
187
|
+
end
|
188
|
+
|
179
189
|
private
|
180
190
|
def assert_content_search(expected_records, term)
|
181
191
|
records = @bookmarks_index_content.search(term).records
|
data/test/test-context.rb
CHANGED
@@ -18,39 +18,17 @@ class ContextTest < Test::Unit::TestCase
|
|
18
18
|
|
19
19
|
def test_default
|
20
20
|
context = Groonga::Context.default
|
21
|
-
assert_not_predicate(context, :use_ql?)
|
22
|
-
assert_not_predicate(context, :batch_mode?)
|
23
21
|
assert_equal(Groonga::Encoding.default, context.encoding)
|
24
22
|
end
|
25
23
|
|
26
24
|
def test_default_options
|
27
25
|
Groonga::Context.default_options = {
|
28
|
-
:use_ql => true,
|
29
|
-
:batch_mode => true,
|
30
26
|
:encoding => :utf8,
|
31
27
|
}
|
32
28
|
context = Groonga::Context.default
|
33
|
-
assert_predicate(context, :use_ql?)
|
34
|
-
assert_predicate(context, :batch_mode?)
|
35
29
|
assert_equal(Groonga::Encoding::UTF8, context.encoding)
|
36
30
|
end
|
37
31
|
|
38
|
-
def test_use_ql?
|
39
|
-
context = Groonga::Context.new
|
40
|
-
assert_not_predicate(context, :use_ql?)
|
41
|
-
|
42
|
-
context = Groonga::Context.new(:use_ql => true)
|
43
|
-
assert_predicate(context, :use_ql?)
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_batch_mode?
|
47
|
-
context = Groonga::Context.new
|
48
|
-
assert_not_predicate(context, :batch_mode?)
|
49
|
-
|
50
|
-
context = Groonga::Context.new(:batch_mode => true)
|
51
|
-
assert_predicate(context, :batch_mode?)
|
52
|
-
end
|
53
|
-
|
54
32
|
def test_encoding
|
55
33
|
context = Groonga::Context.new
|
56
34
|
assert_equal(Groonga::Encoding.default, context.encoding)
|
@@ -60,12 +38,8 @@ class ContextTest < Test::Unit::TestCase
|
|
60
38
|
end
|
61
39
|
|
62
40
|
def test_inspect
|
63
|
-
context = Groonga::Context.new(:
|
64
|
-
:batch_mode => true,
|
65
|
-
:encoding => Groonga::Encoding::UTF8)
|
41
|
+
context = Groonga::Context.new(:encoding => Groonga::Encoding::UTF8)
|
66
42
|
assert_equal("#<Groonga::Context " +
|
67
|
-
"use_ql: <true>, " +
|
68
|
-
"batch_mode: <true>, " +
|
69
43
|
"encoding: <:utf8>, " +
|
70
44
|
"database: <nil>>",
|
71
45
|
context.inspect)
|
@@ -75,8 +49,6 @@ class ContextTest < Test::Unit::TestCase
|
|
75
49
|
db = Groonga::Database.create
|
76
50
|
context = Groonga::Context.default
|
77
51
|
assert_equal("#<Groonga::Context " +
|
78
|
-
"use_ql: <false>, " +
|
79
|
-
"batch_mode: <false>, " +
|
80
52
|
"encoding: <#{Groonga::Encoding.default.inspect}>, " +
|
81
53
|
"database: <#{db.inspect}>>",
|
82
54
|
context.inspect)
|
data/test/test-database.rb
CHANGED
@@ -59,4 +59,34 @@ class DatabaseTest < Test::Unit::TestCase
|
|
59
59
|
|
60
60
|
assert_not_predicate(Groonga::Database.new(db_path.to_s), :closed?)
|
61
61
|
end
|
62
|
+
|
63
|
+
def test_each
|
64
|
+
db_path = @tmp_dir + "db"
|
65
|
+
database = Groonga::Database.create(:path => db_path.to_s)
|
66
|
+
assert_equal(["<float>",
|
67
|
+
"<int64>",
|
68
|
+
"<int>",
|
69
|
+
"<longtext>",
|
70
|
+
"<proc:disp>",
|
71
|
+
"<proc:init>",
|
72
|
+
"<proc:scan>",
|
73
|
+
"<proc:search>",
|
74
|
+
"<ranguba:objects>",
|
75
|
+
"<shorttext>",
|
76
|
+
"<text>",
|
77
|
+
"<time>",
|
78
|
+
"<token:bigram>",
|
79
|
+
"<token:delimit>",
|
80
|
+
"<token:mecab>",
|
81
|
+
"<token:trigram>",
|
82
|
+
"<token:unigram>",
|
83
|
+
"<uint64>",
|
84
|
+
"<uint>"],
|
85
|
+
database.collect {|object| object.name}.sort)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_encoding
|
89
|
+
assert_equal(Groonga::Encoding.default,
|
90
|
+
Groonga::Database.create.encoding)
|
91
|
+
end
|
62
92
|
end
|
data/test/test-hash.rb
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
|
3
|
+
#
|
4
|
+
# This library is free software; you can redistribute it and/or
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
6
|
+
# License version 2.1 as published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
16
|
+
|
17
|
+
class HashTest < Test::Unit::TestCase
|
18
|
+
include GroongaTestUtils
|
19
|
+
|
20
|
+
setup :setup_database
|
21
|
+
|
22
|
+
def test_delete
|
23
|
+
bookmarks_path = @tables_dir + "bookmarks"
|
24
|
+
bookmarks = Groonga::Hash.create(:name => "bookmarks",
|
25
|
+
:path => bookmarks_path.to_s)
|
26
|
+
|
27
|
+
groonga = bookmarks.add("groonga")
|
28
|
+
google = bookmarks.add("Google")
|
29
|
+
cutter = bookmarks.add("Cutter")
|
30
|
+
|
31
|
+
assert_equal(["groonga", "Google", "Cutter"],
|
32
|
+
bookmarks.collect {|bookmark| bookmark.key})
|
33
|
+
|
34
|
+
bookmarks.delete(google.id)
|
35
|
+
assert_equal(["groonga", "Cutter"],
|
36
|
+
bookmarks.collect {|bookmark| bookmark.key})
|
37
|
+
|
38
|
+
bookmarks.delete(cutter.key)
|
39
|
+
assert_equal(["groonga"],
|
40
|
+
bookmarks.collect {|bookmark| bookmark.key})
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_array_reference
|
44
|
+
value = "groonga"
|
45
|
+
bookmarks_path = @tables_dir + "bookmarks"
|
46
|
+
bookmarks = Groonga::Hash.create(:name => "bookmarks",
|
47
|
+
:path => bookmarks_path.to_s,
|
48
|
+
:key_type => "<shorttext>",
|
49
|
+
:value_size => value.size)
|
50
|
+
bookmarks["http://google.com/"] = value
|
51
|
+
assert_equal(value, bookmarks["http://google.com/"])
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_find
|
55
|
+
bookmarks_path = @tables_dir + "bookmarks"
|
56
|
+
bookmarks = Groonga::Hash.create(:name => "bookmarks",
|
57
|
+
:path => bookmarks_path.to_s,
|
58
|
+
:key_type => "<shorttext>")
|
59
|
+
bookmark = bookmarks.add("http://google.com/")
|
60
|
+
assert_equal(bookmark, bookmarks.find("http://google.com/"))
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def test_inspect_anonymous
|
65
|
+
path = @tables_dir + "anoymous.groonga"
|
66
|
+
anonymous_table = Groonga::Hash.create(:path => path.to_s)
|
67
|
+
assert_equal("#<Groonga::Hash " +
|
68
|
+
"id: <#{anonymous_table.id}>, " +
|
69
|
+
"name: (anonymous), " +
|
70
|
+
"path: <#{path}>, " +
|
71
|
+
"domain: <nil>, " +
|
72
|
+
"range: <nil>, " +
|
73
|
+
"encoding: <#{encoding.inspect}>, " +
|
74
|
+
"size: <0>>",
|
75
|
+
anonymous_table.inspect)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_inspect_anonymous_temporary
|
79
|
+
anonymous_table = Groonga::Hash.create
|
80
|
+
assert_equal("#<Groonga::Hash " +
|
81
|
+
"id: <#{anonymous_table.id}>, " +
|
82
|
+
"name: (anonymous), " +
|
83
|
+
"path: (temporary), " +
|
84
|
+
"domain: <nil>, " +
|
85
|
+
"range: <nil>, " +
|
86
|
+
"encoding: <#{encoding.inspect}>, " +
|
87
|
+
"size: <0>>",
|
88
|
+
anonymous_table.inspect)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_inspect_named
|
92
|
+
path = @tables_dir + "named.groonga"
|
93
|
+
named_table = Groonga::Hash.create(:name => "name", :path => path.to_s)
|
94
|
+
assert_equal("#<Groonga::Hash " +
|
95
|
+
"id: <#{named_table.id}>, " +
|
96
|
+
"name: <name>, " +
|
97
|
+
"path: <#{path}>, " +
|
98
|
+
"domain: <nil>, " +
|
99
|
+
"range: <nil>, " +
|
100
|
+
"encoding: <#{encoding.inspect}>, " +
|
101
|
+
"size: <0>>",
|
102
|
+
named_table.inspect)
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_inspect_named_temporary
|
106
|
+
named_table = Groonga::Hash.create(:name => "name")
|
107
|
+
assert_equal("#<Groonga::Hash " +
|
108
|
+
"id: <#{named_table.id}>, " +
|
109
|
+
"name: <name>, " +
|
110
|
+
"path: (temporary), " +
|
111
|
+
"domain: <nil>, " +
|
112
|
+
"range: <nil>, " +
|
113
|
+
"encoding: <#{encoding.inspect}>, " +
|
114
|
+
"size: <0>>",
|
115
|
+
named_table.inspect)
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_encoding
|
119
|
+
assert_equal(Groonga::Encoding.default,
|
120
|
+
Groonga::Hash.create.encoding)
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_tokenizer
|
124
|
+
hash = Groonga::Hash.create
|
125
|
+
assert_nil(hash.default_tokenizer)
|
126
|
+
hash.default_tokenizer = "<token:bigram>"
|
127
|
+
assert_equal(Groonga::Context.default["<token:bigram>"],
|
128
|
+
hash.default_tokenizer)
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_search
|
132
|
+
users = Groonga::Array.create(:name => "<users>")
|
133
|
+
user_name = users.define_column("name", "<shorttext>")
|
134
|
+
|
135
|
+
bookmarks = Groonga::Hash.create(:name => "<bookmarks>",
|
136
|
+
:key_type => "<shorttext>")
|
137
|
+
bookmark_user_id = bookmarks.define_column("user_id", users)
|
138
|
+
|
139
|
+
daijiro = users.add
|
140
|
+
daijiro["name"] = "daijiro"
|
141
|
+
gunyarakun = users.add
|
142
|
+
gunyarakun["name"] = "gunyarakun"
|
143
|
+
|
144
|
+
groonga = bookmarks.add("http://groonga.org/")
|
145
|
+
groonga["user_id"] = daijiro
|
146
|
+
|
147
|
+
records = bookmarks.search("http://groonga.org/")
|
148
|
+
assert_equal(["daijiro"],
|
149
|
+
records.records.collect {|record| record[".user_id.name"]})
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_add
|
153
|
+
users = Groonga::Hash.create(:name => "<users>")
|
154
|
+
users.define_column("address", "<text>")
|
155
|
+
me = users.add("me", :address => "me@example.com")
|
156
|
+
assert_equal("me@example.com", me[:address])
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_default_tokenizer_on_create
|
160
|
+
terms = Groonga::Hash.create(:name => "<terms>",
|
161
|
+
:default_tokenizer => "<token:trigram>")
|
162
|
+
assert_equal(context[Groonga::Type::TRIGRAM],
|
163
|
+
terms.default_tokenizer)
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_duplicated_name
|
167
|
+
Groonga::Hash.create(:name => "<users>")
|
168
|
+
assert_raise(Groonga::InvalidArgument) do
|
169
|
+
Groonga::Hash.create(:name => "<users>")
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_define_index_column_implicit_with_position
|
174
|
+
bookmarks = Groonga::Hash.create(:name => "<bookmarks>")
|
175
|
+
bookmarks.define_column("comment", "<text>")
|
176
|
+
terms = Groonga::Hash.create(:name => "<terms>",
|
177
|
+
:default_tokenizer => "<token:bigram>")
|
178
|
+
index = terms.define_index_column("comment", bookmarks,
|
179
|
+
:source => "<bookmarks>.comment")
|
180
|
+
groonga = bookmarks.add("groonga", :comment => "search engine by Brazil")
|
181
|
+
google = bookmarks.add("google", :comment => "search engine by Google")
|
182
|
+
ruby = bookmarks.add("ruby", :comment => "programing language")
|
183
|
+
|
184
|
+
assert_equal(["groonga", "google"],
|
185
|
+
index.search("engine").collect {|record| record.key.key})
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_open_same_name
|
189
|
+
users_created = Groonga::Hash.create(:name => "<users>")
|
190
|
+
users_opened = Groonga::Hash.open(:name => "<users>")
|
191
|
+
users_opened.add("morita")
|
192
|
+
assert_equal(1, users_created.size)
|
193
|
+
end
|
194
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
#
|
3
|
+
# Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
#
|
5
|
+
# This library is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU Lesser General Public
|
7
|
+
# License version 2.1 as published by the Free Software Foundation.
|
8
|
+
#
|
9
|
+
# This library is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU Lesser General Public
|
15
|
+
# License along with this library; if not, write to the Free Software
|
16
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
17
|
+
|
18
|
+
class IndexColumnTest < Test::Unit::TestCase
|
19
|
+
include GroongaTestUtils
|
20
|
+
|
21
|
+
def setup
|
22
|
+
setup_database
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_array_set_with_record
|
26
|
+
articles = Groonga::Array.create(:name => "<articles>")
|
27
|
+
articles.define_column("content", "<text>")
|
28
|
+
|
29
|
+
terms = Groonga::Hash.create(:name => "<terms>",
|
30
|
+
:default_tokenizer => "<token:bigram>")
|
31
|
+
content_index = terms.define_index_column("content", articles,
|
32
|
+
:with_section => true)
|
33
|
+
|
34
|
+
content = <<-EOC
|
35
|
+
groonga は組み込み型の全文検索エンジンライブラリです。
|
36
|
+
DBMSやスクリプト言語処理系等に組み込むことによって、その
|
37
|
+
全文検索機能を強化することができます。また、リレーショナ
|
38
|
+
ルモデルに基づくデータストア機能を内包しており、groonga
|
39
|
+
単体でも高速なデータストアサーバとして使用することができ
|
40
|
+
ます。
|
41
|
+
|
42
|
+
■全文検索方式
|
43
|
+
転置索引型の全文検索エンジンです。転置索引は圧縮されてファ
|
44
|
+
イルに格納され、検索時のディスク読み出し量を小さく、かつ
|
45
|
+
局所的に抑えるように設計されています。用途に応じて以下の
|
46
|
+
索引タイプを選択できます。
|
47
|
+
EOC
|
48
|
+
|
49
|
+
groonga = articles.add(:content => content)
|
50
|
+
|
51
|
+
content.split(/\n{2,}/).each_with_index do |sentence, i|
|
52
|
+
content_index[groonga] = {:value => sentence, :section => i + 1}
|
53
|
+
end
|
54
|
+
assert_equal([groonga],
|
55
|
+
content_index.search("エンジン").collect {|record| record.key})
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License version 2.1 as published by the Free Software Foundation.
|
6
|
+
#
|
7
|
+
# This library is distributed in the hope that it will be useful,
|
8
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
+
# Lesser General Public License for more details.
|
11
|
+
#
|
12
|
+
# You should have received a copy of the GNU Lesser General Public
|
13
|
+
# License along with this library; if not, write to the Free Software
|
14
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
15
|
+
|
16
|
+
class PatriciaTrieTest < Test::Unit::TestCase
|
17
|
+
include GroongaTestUtils
|
18
|
+
|
19
|
+
setup :setup_database
|
20
|
+
|
21
|
+
def test_encoding
|
22
|
+
assert_equal(Groonga::Encoding.default,
|
23
|
+
Groonga::PatriciaTrie.create.encoding)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_tokenizer
|
27
|
+
trie = Groonga::PatriciaTrie.create
|
28
|
+
assert_nil(trie.default_tokenizer)
|
29
|
+
trie.default_tokenizer = "<token:trigram>"
|
30
|
+
assert_equal(Groonga::Context.default["<token:trigram>"],
|
31
|
+
trie.default_tokenizer)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_search
|
35
|
+
users = Groonga::Array.create(:name => "<users>")
|
36
|
+
user_name = users.define_column("name", "<shorttext>")
|
37
|
+
|
38
|
+
bookmarks = Groonga::PatriciaTrie.create(:name => "<bookmarks>",
|
39
|
+
:key_type => "<shorttext>")
|
40
|
+
bookmark_user_id = bookmarks.define_column("user_id", users)
|
41
|
+
|
42
|
+
daijiro = users.add
|
43
|
+
daijiro["name"] = "daijiro"
|
44
|
+
gunyarakun = users.add
|
45
|
+
gunyarakun["name"] = "gunyarakun"
|
46
|
+
|
47
|
+
groonga = bookmarks.add("http://groonga.org/")
|
48
|
+
groonga["user_id"] = daijiro
|
49
|
+
|
50
|
+
records = bookmarks.search("http://groonga.org/")
|
51
|
+
assert_equal(["daijiro"],
|
52
|
+
records.records.collect {|record| record[".user_id.name"]})
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_add
|
56
|
+
users = Groonga::PatriciaTrie.create(:name => "<users>")
|
57
|
+
users.define_column("address", "<text>")
|
58
|
+
me = users.add("me", :address => "me@example.com")
|
59
|
+
assert_equal("me@example.com", me[:address])
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_default_tokenizer_on_create
|
63
|
+
terms = Groonga::PatriciaTrie.create(:name => "<terms>",
|
64
|
+
:default_tokenizer => "<token:unigram>")
|
65
|
+
assert_equal(context[Groonga::Type::UNIGRAM],
|
66
|
+
terms.default_tokenizer)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_duplicated_name
|
70
|
+
Groonga::PatriciaTrie.create(:name => "<users>")
|
71
|
+
assert_raise(Groonga::InvalidArgument) do
|
72
|
+
Groonga::PatriciaTrie.create(:name => "<users>")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_open_same_name
|
77
|
+
users_created = Groonga::PatriciaTrie.create(:name => "<users>")
|
78
|
+
users_opened = Groonga::PatriciaTrie.open(:name => "<users>")
|
79
|
+
users_opened.add("morita")
|
80
|
+
assert_equal(1, users_created.size)
|
81
|
+
end
|
82
|
+
end
|
data/test/test-record.rb
CHANGED
@@ -80,22 +80,22 @@ class RecordTest < Test::Unit::TestCase
|
|
80
80
|
@bookmarks_index =
|
81
81
|
Groonga::PatriciaTrie.create(:name => "bookmarks-index",
|
82
82
|
:path => @bookmarks_index_path.to_s)
|
83
|
+
@bookmarks_index.default_tokenizer = "<token:bigram>"
|
84
|
+
|
83
85
|
@content_index_column_path = @columns_dir + "content-index"
|
84
86
|
@bookmarks_content_index =
|
85
|
-
@bookmarks_index.
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
:path => @content_index_column_path.to_s)
|
87
|
+
@bookmarks_index.define_index_column("<index:content>", @bookmarks,
|
88
|
+
:with_section => true,
|
89
|
+
:with_weight => true,
|
90
|
+
:with_position => true,
|
91
|
+
:path => @content_index_column_path.to_s)
|
91
92
|
@bookmarks_content_index.source = @bookmarks_content
|
92
93
|
|
93
94
|
@uri_index_column_path = @columns_dir + "uri-index"
|
94
95
|
@bookmarks_uri_index =
|
95
|
-
@bookmarks_index.
|
96
|
-
|
97
|
-
|
98
|
-
:path => @uri_index_column_path.to_s)
|
96
|
+
@bookmarks_index.define_index_column("<index:uri>", @bookmarks,
|
97
|
+
:with_position => true,
|
98
|
+
:path => @uri_index_column_path.to_s)
|
99
99
|
@bookmarks_uri_index.source = @bookmarks_uri
|
100
100
|
end
|
101
101
|
|