rroonga 1.0.1-x86-mingw32 → 1.1.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (387) hide show
  1. data/NEWS.ja.rdoc +146 -0
  2. data/NEWS.rdoc +146 -0
  3. data/README.ja.rdoc +7 -5
  4. data/README.rdoc +6 -5
  5. data/Rakefile +170 -18
  6. data/benchmark/create-wikipedia-database.rb +212 -0
  7. data/benchmark/read-write-many-small-items.rb +0 -0
  8. data/benchmark/repeat-load.rb +213 -0
  9. data/benchmark/select.rb +1052 -0
  10. data/benchmark/write-many-small-items.rb +0 -0
  11. data/example/bookmark.rb +94 -91
  12. data/example/index-html.rb +0 -0
  13. data/ext/groonga/extconf.rb +6 -6
  14. data/ext/groonga/rb-grn-accessor.c +1 -1
  15. data/ext/groonga/rb-grn-array.c +1 -1
  16. data/ext/groonga/rb-grn-column.c +201 -10
  17. data/ext/groonga/rb-grn-context.c +119 -20
  18. data/ext/groonga/rb-grn-database.c +27 -4
  19. data/ext/groonga/rb-grn-exception.c +15 -0
  20. data/ext/groonga/rb-grn-expression.c +14 -10
  21. data/ext/groonga/rb-grn-hash.c +4 -4
  22. data/ext/groonga/rb-grn-index-column.c +10 -6
  23. data/ext/groonga/rb-grn-logger.c +2 -2
  24. data/ext/groonga/rb-grn-object.c +33 -29
  25. data/ext/groonga/{rb-grn-operation.c → rb-grn-operator.c} +89 -87
  26. data/ext/groonga/rb-grn-patricia-trie.c +12 -12
  27. data/ext/groonga/rb-grn-plugin.c +134 -0
  28. data/ext/groonga/rb-grn-procedure.c +1 -1
  29. data/ext/groonga/rb-grn-query.c +7 -7
  30. data/ext/groonga/rb-grn-snippet.c +4 -3
  31. data/ext/groonga/rb-grn-table-cursor.c +1 -1
  32. data/ext/groonga/rb-grn-table-key-support.c +27 -24
  33. data/ext/groonga/rb-grn-table.c +119 -58
  34. data/ext/groonga/rb-grn-type.c +1 -1
  35. data/ext/groonga/rb-grn-utils.c +20 -19
  36. data/ext/groonga/rb-grn-variable.c +1 -1
  37. data/ext/groonga/rb-grn-view-accessor.c +1 -1
  38. data/ext/groonga/rb-grn-view.c +1 -1
  39. data/ext/groonga/rb-grn.h +26 -20
  40. data/ext/groonga/rb-groonga.c +6 -4
  41. data/extconf.rb +10 -4
  42. data/html/developer.html +8 -2
  43. data/html/favicon.ico +0 -0
  44. data/html/favicon.svg +591 -0
  45. data/html/index.html +78 -12
  46. data/html/logo.svg +612 -0
  47. data/html/ranguba.css +92 -7
  48. data/html/readme.svg +256 -0
  49. data/lib/groonga.so +0 -0
  50. data/lib/groonga/context.rb +52 -1
  51. data/lib/groonga/expression-builder.rb +42 -6
  52. data/lib/groonga/record.rb +84 -15
  53. data/lib/groonga/schema.rb +524 -122
  54. data/pkg/rroonga-1.1.0-x86-mingw32/NEWS.ja.rdoc +326 -0
  55. data/pkg/rroonga-1.1.0-x86-mingw32/NEWS.rdoc +328 -0
  56. data/pkg/rroonga-1.1.0-x86-mingw32/README.ja.rdoc +68 -0
  57. data/pkg/rroonga-1.1.0-x86-mingw32/README.rdoc +68 -0
  58. data/pkg/rroonga-1.1.0-x86-mingw32/text/expression.rdoc +285 -0
  59. data/{text/TUTORIAL.ja.rdoc → pkg/rroonga-1.1.0-x86-mingw32/text/tutorial.ja.rdoc} +165 -126
  60. data/pkg/rroonga-1.1.0/NEWS.ja.rdoc +326 -0
  61. data/pkg/rroonga-1.1.0/NEWS.rdoc +328 -0
  62. data/pkg/rroonga-1.1.0/README.ja.rdoc +68 -0
  63. data/pkg/rroonga-1.1.0/README.rdoc +68 -0
  64. data/pkg/rroonga-1.1.0/text/expression.rdoc +285 -0
  65. data/pkg/rroonga-1.1.0/text/tutorial.ja.rdoc +433 -0
  66. data/rroonga-build.rb +3 -3
  67. data/test/run-test.rb +1 -1
  68. data/test/test-array.rb +4 -0
  69. data/test/test-column.rb +31 -1
  70. data/test/test-context-select.rb +45 -14
  71. data/test/test-context.rb +44 -0
  72. data/test/test-database.rb +21 -1
  73. data/test/test-expression-builder.rb +46 -5
  74. data/test/test-fix-size-column.rb +12 -0
  75. data/test/test-hash.rb +10 -4
  76. data/test/test-index-column.rb +33 -0
  77. data/test/test-patricia-trie.rb +6 -0
  78. data/test/test-plugin.rb +29 -0
  79. data/test/test-record.rb +84 -1
  80. data/test/test-remote.rb +3 -2
  81. data/test/test-schema-create-table.rb +32 -2
  82. data/test/test-schema-type.rb +167 -0
  83. data/test/test-schema.rb +159 -12
  84. data/test/test-table-select-weight.rb +20 -1
  85. data/test/test-table-select.rb +12 -0
  86. data/test/test-table.rb +65 -0
  87. data/test/test-variable-size-column.rb +12 -0
  88. data/text/tutorial.ja.rdoc +433 -0
  89. data/vendor/local/bin/grntest.exe +0 -0
  90. data/vendor/local/bin/groonga.exe +0 -0
  91. data/vendor/local/bin/libgroonga-0.dll +0 -0
  92. data/vendor/local/etc/groonga/init.d/redhat/groonga +1 -9
  93. data/vendor/local/include/groonga/groonga.h +156 -6
  94. data/vendor/local/include/groonga/groonga/plugin.h +44 -0
  95. data/vendor/local/lib/groonga/plugins/suggest/suggest.a +0 -0
  96. data/vendor/local/lib/groonga/plugins/suggest/suggest.dll +0 -0
  97. data/vendor/local/lib/groonga/plugins/suggest/suggest.dll.a +0 -0
  98. data/vendor/local/lib/groonga/{modules → plugins}/suggest/suggest.la +2 -2
  99. data/vendor/local/lib/libgroonga.a +0 -0
  100. data/vendor/local/lib/libgroonga.dll.a +0 -0
  101. data/vendor/local/lib/libgroonga.la +1 -1
  102. data/vendor/local/lib/pkgconfig/groonga.pc +3 -2
  103. data/vendor/local/share/groonga/examples/dictionary/edict/edict_import.sh +14 -3
  104. data/vendor/local/share/groonga/examples/dictionary/eijiro/eijiro_import.sh +3 -1
  105. data/vendor/local/share/groonga/examples/dictionary/gene95/gene_import.sh +19 -3
  106. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_load +0 -0
  107. data/vendor/local/share/groonga/munin/plugins/groonga_cpu_time +0 -0
  108. data/vendor/local/share/groonga/munin/plugins/groonga_disk +0 -0
  109. data/vendor/local/share/groonga/munin/plugins/groonga_memory +0 -0
  110. data/vendor/local/share/groonga/munin/plugins/groonga_n_records +0 -0
  111. data/vendor/local/share/groonga/munin/plugins/groonga_query_performance +0 -0
  112. data/vendor/local/share/groonga/munin/plugins/groonga_status +0 -0
  113. metadata +91 -341
  114. data/html/favicon.xcf +0 -0
  115. data/html/logo.xcf +0 -0
  116. data/lib/1.8/groonga.so +0 -0
  117. data/lib/1.9/groonga.so +0 -0
  118. data/license/GPL +0 -340
  119. data/license/RUBY +0 -59
  120. data/vendor/local/lib/groonga/modules/suggest/suggest.a +0 -0
  121. data/vendor/local/lib/groonga/modules/suggest/suggest.dll +0 -0
  122. data/vendor/local/lib/groonga/modules/suggest/suggest.dll.a +0 -0
  123. data/vendor/local/share/groonga/doc/ja/html/.buildinfo +0 -4
  124. data/vendor/local/share/groonga/doc/ja/html/_sources/characteristic.txt +0 -56
  125. data/vendor/local/share/groonga/doc/ja/html/_sources/commands.txt +0 -10
  126. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/cache_limit.txt +0 -52
  127. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/check.txt +0 -164
  128. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/clearlock.txt +0 -61
  129. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/column_create.txt +0 -93
  130. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/column_list.txt +0 -97
  131. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/column_remove.txt +0 -58
  132. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/define_selector.txt +0 -114
  133. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/defrag.txt +0 -57
  134. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/delete.txt +0 -68
  135. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/dump.txt +0 -62
  136. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/load.txt +0 -98
  137. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/log_level.txt +0 -65
  138. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/log_put.txt +0 -69
  139. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/log_reopen.txt +0 -66
  140. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/quit.txt +0 -38
  141. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/select.txt +0 -247
  142. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/shutdown.txt +0 -38
  143. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/status.txt +0 -59
  144. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/suggest.txt +0 -79
  145. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/table_create.txt +0 -111
  146. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/table_list.txt +0 -87
  147. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/table_remove.txt +0 -50
  148. data/vendor/local/share/groonga/doc/ja/html/_sources/commands/view_add.txt +0 -53
  149. data/vendor/local/share/groonga/doc/ja/html/_sources/commands_not_implemented/add.txt +0 -102
  150. data/vendor/local/share/groonga/doc/ja/html/_sources/commands_not_implemented/get.txt +0 -78
  151. data/vendor/local/share/groonga/doc/ja/html/_sources/commands_not_implemented/set.txt +0 -103
  152. data/vendor/local/share/groonga/doc/ja/html/_sources/developer.txt +0 -10
  153. data/vendor/local/share/groonga/doc/ja/html/_sources/developer/com.txt +0 -18
  154. data/vendor/local/share/groonga/doc/ja/html/_sources/developer/document.txt +0 -38
  155. data/vendor/local/share/groonga/doc/ja/html/_sources/developer/query.txt +0 -212
  156. data/vendor/local/share/groonga/doc/ja/html/_sources/developer/test.txt +0 -114
  157. data/vendor/local/share/groonga/doc/ja/html/_sources/execfile.txt +0 -226
  158. data/vendor/local/share/groonga/doc/ja/html/_sources/expr.txt +0 -43
  159. data/vendor/local/share/groonga/doc/ja/html/_sources/functions.txt +0 -10
  160. data/vendor/local/share/groonga/doc/ja/html/_sources/functions/edit_distance.txt +0 -48
  161. data/vendor/local/share/groonga/doc/ja/html/_sources/functions/geo_distance.txt +0 -51
  162. data/vendor/local/share/groonga/doc/ja/html/_sources/functions/geo_in_circle.txt +0 -54
  163. data/vendor/local/share/groonga/doc/ja/html/_sources/functions/geo_in_rectangle.txt +0 -55
  164. data/vendor/local/share/groonga/doc/ja/html/_sources/functions/now.txt +0 -34
  165. data/vendor/local/share/groonga/doc/ja/html/_sources/functions/rand.txt +0 -41
  166. data/vendor/local/share/groonga/doc/ja/html/_sources/grnslap.txt +0 -64
  167. data/vendor/local/share/groonga/doc/ja/html/_sources/grntest.txt +0 -259
  168. data/vendor/local/share/groonga/doc/ja/html/_sources/http.txt +0 -52
  169. data/vendor/local/share/groonga/doc/ja/html/_sources/index.txt +0 -21
  170. data/vendor/local/share/groonga/doc/ja/html/_sources/install.txt +0 -114
  171. data/vendor/local/share/groonga/doc/ja/html/_sources/news.txt +0 -199
  172. data/vendor/local/share/groonga/doc/ja/html/_sources/process.txt +0 -12
  173. data/vendor/local/share/groonga/doc/ja/html/_sources/pseudo_column.txt +0 -38
  174. data/vendor/local/share/groonga/doc/ja/html/_sources/reference.txt +0 -14
  175. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial.txt +0 -10
  176. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial01.txt +0 -293
  177. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial02.txt +0 -100
  178. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial03.txt +0 -72
  179. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial04.txt +0 -111
  180. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial05.txt +0 -65
  181. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial06.txt +0 -91
  182. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial07.txt +0 -92
  183. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial08.txt +0 -53
  184. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial09.txt +0 -9
  185. data/vendor/local/share/groonga/doc/ja/html/_sources/tutorial/tutorial10.txt +0 -486
  186. data/vendor/local/share/groonga/doc/ja/html/_sources/type.txt +0 -118
  187. data/vendor/local/share/groonga/doc/ja/html/_static/basic.css +0 -509
  188. data/vendor/local/share/groonga/doc/ja/html/_static/default.css +0 -277
  189. data/vendor/local/share/groonga/doc/ja/html/_static/doctools.js +0 -247
  190. data/vendor/local/share/groonga/doc/ja/html/_static/file.png +0 -0
  191. data/vendor/local/share/groonga/doc/ja/html/_static/jquery.js +0 -6240
  192. data/vendor/local/share/groonga/doc/ja/html/_static/minus.png +0 -0
  193. data/vendor/local/share/groonga/doc/ja/html/_static/plus.png +0 -0
  194. data/vendor/local/share/groonga/doc/ja/html/_static/pygments.css +0 -61
  195. data/vendor/local/share/groonga/doc/ja/html/_static/searchtools.js +0 -518
  196. data/vendor/local/share/groonga/doc/ja/html/_static/sidebar.js +0 -147
  197. data/vendor/local/share/groonga/doc/ja/html/_static/underscore.js +0 -16
  198. data/vendor/local/share/groonga/doc/ja/html/characteristic.html +0 -162
  199. data/vendor/local/share/groonga/doc/ja/html/commands.html +0 -139
  200. data/vendor/local/share/groonga/doc/ja/html/commands/cache_limit.html +0 -173
  201. data/vendor/local/share/groonga/doc/ja/html/commands/check.html +0 -285
  202. data/vendor/local/share/groonga/doc/ja/html/commands/clearlock.html +0 -180
  203. data/vendor/local/share/groonga/doc/ja/html/commands/column_create.html +0 -210
  204. data/vendor/local/share/groonga/doc/ja/html/commands/column_list.html +0 -220
  205. data/vendor/local/share/groonga/doc/ja/html/commands/column_remove.html +0 -183
  206. data/vendor/local/share/groonga/doc/ja/html/commands/define_selector.html +0 -221
  207. data/vendor/local/share/groonga/doc/ja/html/commands/defrag.html +0 -177
  208. data/vendor/local/share/groonga/doc/ja/html/commands/delete.html +0 -182
  209. data/vendor/local/share/groonga/doc/ja/html/commands/dump.html +0 -177
  210. data/vendor/local/share/groonga/doc/ja/html/commands/load.html +0 -208
  211. data/vendor/local/share/groonga/doc/ja/html/commands/log_level.html +0 -187
  212. data/vendor/local/share/groonga/doc/ja/html/commands/log_put.html +0 -190
  213. data/vendor/local/share/groonga/doc/ja/html/commands/log_reopen.html +0 -188
  214. data/vendor/local/share/groonga/doc/ja/html/commands/quit.html +0 -156
  215. data/vendor/local/share/groonga/doc/ja/html/commands/select.html +0 -331
  216. data/vendor/local/share/groonga/doc/ja/html/commands/shutdown.html +0 -156
  217. data/vendor/local/share/groonga/doc/ja/html/commands/status.html +0 -179
  218. data/vendor/local/share/groonga/doc/ja/html/commands/suggest.html +0 -191
  219. data/vendor/local/share/groonga/doc/ja/html/commands/table_create.html +0 -222
  220. data/vendor/local/share/groonga/doc/ja/html/commands/table_list.html +0 -202
  221. data/vendor/local/share/groonga/doc/ja/html/commands/table_remove.html +0 -173
  222. data/vendor/local/share/groonga/doc/ja/html/commands/view_add.html +0 -175
  223. data/vendor/local/share/groonga/doc/ja/html/commands_not_implemented/add.html +0 -180
  224. data/vendor/local/share/groonga/doc/ja/html/commands_not_implemented/get.html +0 -161
  225. data/vendor/local/share/groonga/doc/ja/html/commands_not_implemented/set.html +0 -182
  226. data/vendor/local/share/groonga/doc/ja/html/developer.html +0 -118
  227. data/vendor/local/share/groonga/doc/ja/html/developer/com.html +0 -136
  228. data/vendor/local/share/groonga/doc/ja/html/developer/document.html +0 -159
  229. data/vendor/local/share/groonga/doc/ja/html/developer/query.html +0 -336
  230. data/vendor/local/share/groonga/doc/ja/html/developer/test.html +0 -220
  231. data/vendor/local/share/groonga/doc/ja/html/execfile.html +0 -370
  232. data/vendor/local/share/groonga/doc/ja/html/expr.html +0 -157
  233. data/vendor/local/share/groonga/doc/ja/html/functions.html +0 -122
  234. data/vendor/local/share/groonga/doc/ja/html/functions/edit_distance.html +0 -162
  235. data/vendor/local/share/groonga/doc/ja/html/functions/geo_distance.html +0 -170
  236. data/vendor/local/share/groonga/doc/ja/html/functions/geo_in_circle.html +0 -173
  237. data/vendor/local/share/groonga/doc/ja/html/functions/geo_in_rectangle.html +0 -172
  238. data/vendor/local/share/groonga/doc/ja/html/functions/now.html +0 -152
  239. data/vendor/local/share/groonga/doc/ja/html/functions/rand.html +0 -159
  240. data/vendor/local/share/groonga/doc/ja/html/genindex.html +0 -227
  241. data/vendor/local/share/groonga/doc/ja/html/grnslap.html +0 -183
  242. data/vendor/local/share/groonga/doc/ja/html/grntest.html +0 -368
  243. data/vendor/local/share/groonga/doc/ja/html/http.html +0 -163
  244. data/vendor/local/share/groonga/doc/ja/html/index.html +0 -291
  245. data/vendor/local/share/groonga/doc/ja/html/install.html +0 -228
  246. data/vendor/local/share/groonga/doc/ja/html/news.html +0 -310
  247. data/vendor/local/share/groonga/doc/ja/html/objects.inv +0 -0
  248. data/vendor/local/share/groonga/doc/ja/html/process.html +0 -120
  249. data/vendor/local/share/groonga/doc/ja/html/pseudo_column.html +0 -147
  250. data/vendor/local/share/groonga/doc/ja/html/reference.html +0 -174
  251. data/vendor/local/share/groonga/doc/ja/html/search.html +0 -96
  252. data/vendor/local/share/groonga/doc/ja/html/searchindex.js +0 -1
  253. data/vendor/local/share/groonga/doc/ja/html/tutorial.html +0 -172
  254. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial01.html +0 -388
  255. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial02.html +0 -214
  256. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial03.html +0 -183
  257. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial04.html +0 -212
  258. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial05.html +0 -169
  259. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial06.html +0 -209
  260. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial07.html +0 -212
  261. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial08.html +0 -139
  262. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial09.html +0 -114
  263. data/vendor/local/share/groonga/doc/ja/html/tutorial/tutorial10.html +0 -458
  264. data/vendor/local/share/groonga/doc/ja/html/type.html +0 -217
  265. data/vendor/local/share/groonga/doc/ja/source/__init__.py +0 -0
  266. data/vendor/local/share/groonga/doc/ja/source/characteristic.txt +0 -56
  267. data/vendor/local/share/groonga/doc/ja/source/commands.txt +0 -10
  268. data/vendor/local/share/groonga/doc/ja/source/commands/cache_limit.txt +0 -52
  269. data/vendor/local/share/groonga/doc/ja/source/commands/check.txt +0 -164
  270. data/vendor/local/share/groonga/doc/ja/source/commands/clearlock.txt +0 -61
  271. data/vendor/local/share/groonga/doc/ja/source/commands/column_create.txt +0 -93
  272. data/vendor/local/share/groonga/doc/ja/source/commands/column_list.txt +0 -97
  273. data/vendor/local/share/groonga/doc/ja/source/commands/column_remove.txt +0 -58
  274. data/vendor/local/share/groonga/doc/ja/source/commands/define_selector.txt +0 -114
  275. data/vendor/local/share/groonga/doc/ja/source/commands/defrag.txt +0 -57
  276. data/vendor/local/share/groonga/doc/ja/source/commands/delete.txt +0 -68
  277. data/vendor/local/share/groonga/doc/ja/source/commands/dump.txt +0 -62
  278. data/vendor/local/share/groonga/doc/ja/source/commands/load.txt +0 -98
  279. data/vendor/local/share/groonga/doc/ja/source/commands/log_level.txt +0 -65
  280. data/vendor/local/share/groonga/doc/ja/source/commands/log_put.txt +0 -69
  281. data/vendor/local/share/groonga/doc/ja/source/commands/log_reopen.txt +0 -66
  282. data/vendor/local/share/groonga/doc/ja/source/commands/quit.txt +0 -38
  283. data/vendor/local/share/groonga/doc/ja/source/commands/select.txt +0 -247
  284. data/vendor/local/share/groonga/doc/ja/source/commands/shutdown.txt +0 -38
  285. data/vendor/local/share/groonga/doc/ja/source/commands/status.txt +0 -59
  286. data/vendor/local/share/groonga/doc/ja/source/commands/table_create.txt +0 -111
  287. data/vendor/local/share/groonga/doc/ja/source/commands/table_list.txt +0 -87
  288. data/vendor/local/share/groonga/doc/ja/source/commands/table_remove.txt +0 -50
  289. data/vendor/local/share/groonga/doc/ja/source/commands/view_add.txt +0 -53
  290. data/vendor/local/share/groonga/doc/ja/source/commands_not_implemented/add.txt +0 -102
  291. data/vendor/local/share/groonga/doc/ja/source/commands_not_implemented/get.txt +0 -78
  292. data/vendor/local/share/groonga/doc/ja/source/commands_not_implemented/set.txt +0 -103
  293. data/vendor/local/share/groonga/doc/ja/source/conf.py +0 -265
  294. data/vendor/local/share/groonga/doc/ja/source/developer.txt +0 -10
  295. data/vendor/local/share/groonga/doc/ja/source/developer/com.txt +0 -18
  296. data/vendor/local/share/groonga/doc/ja/source/developer/document.txt +0 -38
  297. data/vendor/local/share/groonga/doc/ja/source/developer/query.txt +0 -212
  298. data/vendor/local/share/groonga/doc/ja/source/developer/test.txt +0 -114
  299. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-1.log +0 -6
  300. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-10.log +0 -5
  301. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-11.log +0 -5
  302. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-12.log +0 -5
  303. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-13.log +0 -5
  304. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-14.log +0 -9
  305. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-15.log +0 -5
  306. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-16.log +0 -5
  307. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-17.log +0 -5
  308. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-2.log +0 -5
  309. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-3.log +0 -5
  310. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-4.log +0 -7
  311. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-5.log +0 -5
  312. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-6.log +0 -5
  313. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-7.log +0 -16
  314. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-8.log +0 -5
  315. data/vendor/local/share/groonga/doc/ja/source/example/tutorial01-9.log +0 -5
  316. data/vendor/local/share/groonga/doc/ja/source/example/tutorial02-1.log +0 -8
  317. data/vendor/local/share/groonga/doc/ja/source/example/tutorial02-2.log +0 -6
  318. data/vendor/local/share/groonga/doc/ja/source/example/tutorial02-3.log +0 -12
  319. data/vendor/local/share/groonga/doc/ja/source/example/tutorial03-1.log +0 -18
  320. data/vendor/local/share/groonga/doc/ja/source/example/tutorial03-2.log +0 -10
  321. data/vendor/local/share/groonga/doc/ja/source/example/tutorial03-3.log +0 -10
  322. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-1.log +0 -5
  323. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-2.log +0 -7
  324. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-3.log +0 -7
  325. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-4.log +0 -13
  326. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-5.log +0 -5
  327. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-6.log +0 -5
  328. data/vendor/local/share/groonga/doc/ja/source/example/tutorial04-7.log +0 -5
  329. data/vendor/local/share/groonga/doc/ja/source/example/tutorial05-1.log +0 -24
  330. data/vendor/local/share/groonga/doc/ja/source/example/tutorial05-2.log +0 -5
  331. data/vendor/local/share/groonga/doc/ja/source/example/tutorial05-3.log +0 -5
  332. data/vendor/local/share/groonga/doc/ja/source/example/tutorial05-4.log +0 -5
  333. data/vendor/local/share/groonga/doc/ja/source/example/tutorial05-5.log +0 -5
  334. data/vendor/local/share/groonga/doc/ja/source/example/tutorial05-6.log +0 -5
  335. data/vendor/local/share/groonga/doc/ja/source/example/tutorial06-1.log +0 -25
  336. data/vendor/local/share/groonga/doc/ja/source/example/tutorial06-2.log +0 -9
  337. data/vendor/local/share/groonga/doc/ja/source/example/tutorial06-3.log +0 -21
  338. data/vendor/local/share/groonga/doc/ja/source/example/tutorial06-4.log +0 -7
  339. data/vendor/local/share/groonga/doc/ja/source/example/tutorial06-5.log +0 -5
  340. data/vendor/local/share/groonga/doc/ja/source/example/tutorial07-1.log +0 -22
  341. data/vendor/local/share/groonga/doc/ja/source/example/tutorial07-2.log +0 -9
  342. data/vendor/local/share/groonga/doc/ja/source/example/tutorial07-3.log +0 -20
  343. data/vendor/local/share/groonga/doc/ja/source/example/tutorial07-4.log +0 -9
  344. data/vendor/local/share/groonga/doc/ja/source/example/tutorial08-1.log +0 -14
  345. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-1.log +0 -5
  346. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-10.log +0 -5
  347. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-2.log +0 -5
  348. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-3.log +0 -5
  349. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-4.log +0 -5
  350. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-5.log +0 -5
  351. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-6.log +0 -5
  352. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-7.log +0 -5
  353. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-8.log +0 -5
  354. data/vendor/local/share/groonga/doc/ja/source/example/tutorial10-9.log +0 -5
  355. data/vendor/local/share/groonga/doc/ja/source/execfile.txt +0 -226
  356. data/vendor/local/share/groonga/doc/ja/source/expr.txt +0 -43
  357. data/vendor/local/share/groonga/doc/ja/source/functions.txt +0 -10
  358. data/vendor/local/share/groonga/doc/ja/source/functions/edit_distance.txt +0 -48
  359. data/vendor/local/share/groonga/doc/ja/source/functions/geo_distance.txt +0 -51
  360. data/vendor/local/share/groonga/doc/ja/source/functions/geo_in_circle.txt +0 -54
  361. data/vendor/local/share/groonga/doc/ja/source/functions/geo_in_rectangle.txt +0 -55
  362. data/vendor/local/share/groonga/doc/ja/source/functions/now.txt +0 -34
  363. data/vendor/local/share/groonga/doc/ja/source/functions/rand.txt +0 -41
  364. data/vendor/local/share/groonga/doc/ja/source/grnslap.txt +0 -64
  365. data/vendor/local/share/groonga/doc/ja/source/grntest.txt +0 -259
  366. data/vendor/local/share/groonga/doc/ja/source/http.txt +0 -52
  367. data/vendor/local/share/groonga/doc/ja/source/index.txt +0 -21
  368. data/vendor/local/share/groonga/doc/ja/source/install.txt +0 -114
  369. data/vendor/local/share/groonga/doc/ja/source/news.txt +0 -199
  370. data/vendor/local/share/groonga/doc/ja/source/process.txt +0 -12
  371. data/vendor/local/share/groonga/doc/ja/source/pseudo_column.txt +0 -38
  372. data/vendor/local/share/groonga/doc/ja/source/rdoc.py +0 -762
  373. data/vendor/local/share/groonga/doc/ja/source/reference.txt +0 -14
  374. data/vendor/local/share/groonga/doc/ja/source/tutorial.txt +0 -10
  375. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial01.txt +0 -293
  376. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial02.txt +0 -100
  377. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial03.txt +0 -72
  378. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial04.txt +0 -111
  379. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial05.txt +0 -65
  380. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial06.txt +0 -91
  381. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial07.txt +0 -92
  382. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial08.txt +0 -53
  383. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial09.txt +0 -9
  384. data/vendor/local/share/groonga/doc/ja/source/tutorial/tutorial10.txt +0 -486
  385. data/vendor/local/share/groonga/doc/ja/source/type.txt +0 -118
  386. data/vendor/local/share/groonga/doc/ja/source/update_execution_example.py +0 -113
  387. data/vendor/local/share/man/man1/groonga.1 +0 -5498
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2010 Kouhei Sutou <kou@clear-code.com>
3
+ # Copyright (C) 2010-2011 Kouhei Sutou <kou@clear-code.com>
4
4
  #
5
5
  # This library is free software; you can redistribute it and/or
6
6
  # modify it under the terms of the GNU Lesser General Public
@@ -42,6 +42,11 @@ class TableSelectWeightTest < Test::Unit::TestCase
42
42
  table.index("Comments.content", :with_section => true)
43
43
  end
44
44
 
45
+ schema.create_table("Titles",
46
+ :type => :hash) do |table|
47
+ table.index("Comments.title")
48
+ end
49
+
45
50
  schema.change_table("Users") do |table|
46
51
  table.index("Comments.user")
47
52
  end
@@ -101,4 +106,18 @@ class TableSelectWeightTest < Test::Unit::TestCase
101
106
  [record.title, record.score]
102
107
  end
103
108
  end
109
+
110
+ def test_index
111
+ result = @comments.select do |record|
112
+ record.match("Hello") do |match_record|
113
+ (match_record.index("Titles.Comments_title") * 1000) |
114
+ (match_record.index("Terms.Comments_title") * 100) |
115
+ match_record.content
116
+ end
117
+ end
118
+ assert_equal_select_result([["Hello", 1101], ["(no title)", 3]],
119
+ result) do |record|
120
+ [record.title, record.score]
121
+ end
122
+ end
104
123
  end
@@ -33,7 +33,12 @@ class TableSelectTest < Test::Unit::TestCase
33
33
  :default_tokenizer => "TokenBigram")
34
34
  terms.define_index_column("comment_content", @comments,
35
35
  :with_section => true,
36
+ :with_position => true,
36
37
  :source => "content")
38
+ terms.define_index_column("users_key", @users,
39
+ :with_section => true,
40
+ :with_position => true,
41
+ :source => "_key")
37
42
  @comment1 = @comments.add(:content => "Hello Good-bye!",
38
43
  :created_at => Time.parse("2009-08-09"),
39
44
  :user => "morita")
@@ -147,4 +152,11 @@ class TableSelectTest < Test::Unit::TestCase
147
152
  end
148
153
  assert_equal_select_result([], result)
149
154
  end
155
+
156
+ def test_select_query_key
157
+ result = @users.select do |record|
158
+ record["_key"] =~ "mori"
159
+ end
160
+ assert_equal_select_result([@users["morita"]], result)
161
+ end
150
162
  end
data/test/test-table.rb CHANGED
@@ -594,6 +594,71 @@ class TableTest < Test::Unit::TestCase
594
594
  assert_false(users.have_column?("description"), "description")
595
595
  end
596
596
 
597
+ def test_have_column_id
598
+ users = Groonga::Array.create(:name => "Users")
599
+ assert_true(users.have_column?(:_id))
600
+ end
601
+
602
+ def test_have_column_key_hash
603
+ users = Groonga::Hash.create(:name => "Users",
604
+ :key_type => "ShortText")
605
+ assert_true(users.have_column?(:_key))
606
+ end
607
+
608
+ def test_have_column_key_array
609
+ users = Groonga::Array.create(:name => "Users")
610
+ assert_false(users.have_column?(:_key))
611
+ end
612
+
613
+ def test_have_column_value_hash_with_value_type
614
+ users = Groonga::Hash.create(:name => "Users",
615
+ :key_type => "ShortText",
616
+ :value_type => "Int32")
617
+ assert_true(users.have_column?(:_value))
618
+ end
619
+
620
+ def test_have_column_value_hash_without_value_type
621
+ users = Groonga::Hash.create(:name => "Users",
622
+ :key_type => "ShortText")
623
+ assert_false(users.have_column?(:_value))
624
+ end
625
+
626
+ def test_have_column_value_array
627
+ users = Groonga::Array.create(:name => "Users")
628
+ assert_false(users.have_column?(:_value))
629
+ end
630
+
631
+ def test_have_column_nsubrecs_existent
632
+ users = Groonga::Hash.create(:name => "Users",
633
+ :key_type => "ShortText")
634
+ assert_true(users.select.have_column?(:_nsubrecs))
635
+ end
636
+
637
+ def test_have_column_nsubrecs_nonexistent
638
+ users = Groonga::Hash.create(:name => "Users",
639
+ :key_type => "ShortText")
640
+ assert_false(users.have_column?(:_nsubrecs))
641
+ end
642
+
643
+ def test_have_column_score_existent
644
+ users = Groonga::Hash.create(:name => "Users",
645
+ :key_type => "ShortText")
646
+ assert_true(users.select.have_column?(:_score))
647
+ end
648
+
649
+ def test_have_column_score_nonexistent
650
+ users = Groonga::Hash.create(:name => "Users",
651
+ :key_type => "ShortText")
652
+ assert_false(users.have_column?(:_score))
653
+ end
654
+
655
+ def test_exist?
656
+ users = Groonga::Hash.create(:name => "Users")
657
+ morita = users.add("morita")
658
+ assert_true(users.exist?(morita.id))
659
+ assert_false(users.exist?(morita.id + 1))
660
+ end
661
+
597
662
  private
598
663
  def create_bookmarks
599
664
  bookmarks = Groonga::Array.create(:name => "Bookmarks")
@@ -50,6 +50,18 @@ class VariableSizeColumnTest < Test::Unit::TestCase
50
50
  @yu = @users.add(:name => "Yutaro Shimamura")
51
51
  end
52
52
 
53
+ def test_index?
54
+ assert_not_predicate(@nick_names, :index?)
55
+ end
56
+
57
+ def test_vector?
58
+ assert_predicate(@nick_names, :vector?)
59
+ end
60
+
61
+ def test_scalar?
62
+ assert_not_predicate(@nick_names, :scalar?)
63
+ end
64
+
53
65
  def test_inspect
54
66
  assert_equal("#<Groonga::VariableSizeColumn " +
55
67
  "id: <#{@name.id}>, " +
@@ -0,0 +1,433 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ = チュートリアル
4
+
5
+ このページでは簡単なアプリケーションの作成を通して
6
+ rroongaの操作方法を紹介します。
7
+
8
+ == インストール
9
+
10
+ rroongaはRubyGemsでインストールできます。
11
+
12
+ % sudo gem install rroonga
13
+
14
+ == データベースの作成
15
+
16
+ 簡単なブックマークアプリケーション用のデータベースを作ってみ
17
+ ます。以下のようにgroongaライブラリを読み込んでirbを起動しま
18
+ す。
19
+
20
+ % irb --simple-prompt -rubygems -rgroonga
21
+ >>
22
+
23
+ まず、エンコーディングを設定します。ここではUTF-8を利用します。
24
+
25
+ >> $KCODE = "UTF-8"
26
+ => "UTF-8"
27
+ >> Groonga::Context.default_options = {:encoding => :utf8}
28
+ => {:encoding=>:utf8}
29
+
30
+ それでは、ファイルを指定してデータベースを作成します。
31
+
32
+ >> Groonga::Database.create(:path => "/tmp/bookmark.db")
33
+ => #<Groonga::Database ...>
34
+
35
+ ここで作成したデータベースは、これ以降、暗黙のうちに利用され
36
+ ます。最初にデータベースを作成したら特に意識する必要はありま
37
+ せん。
38
+
39
+ == テーブルの定義
40
+
41
+ groongaには以下の3種類のテーブルがあります。
42
+
43
+ [Groonga::Hash]
44
+ ハッシュテーブル。主キーでレコードを管理します。キーと完全
45
+ 一致するレコードを非常に高速に検索することができます。
46
+ [Groonga::PatriciaTrie]
47
+ パトリシアトライ。ハッシュテーブルに比べて完全一致検索の速
48
+ 度がやや遅いですが、前方一致検索・共通接頭辞探索などの検索
49
+ が行えます。またカーソルを用いてキーの昇降順にレコードを取
50
+ り出すことができます。
51
+ [Groonga::Array]
52
+ 配列。主キーの存在しないテーブルです。レコードはIDによって
53
+ 識別します。
54
+
55
+ ここではハッシュテーブルを利用して、<tt>Items</tt>という名前のテー
56
+ ブルを作成します。キーは文字列とします。
57
+
58
+ >> Groonga::Schema.create_table("Items", :type => :hash)
59
+ => [...]
60
+
61
+ これで<tt>Items</tt>という名前のテーブルが作成できました。
62
+
63
+ 定義したテーブルはGroonga.[]で参照できます。
64
+
65
+ >> items = Groonga["Items"]
66
+ => #<Groonga::Hash ...>
67
+
68
+ テーブルはRubyのHashのように扱えます。
69
+
70
+ 例えば、以下のように+size+でテーブルに登録されているレコード
71
+ の件数を取得できます。
72
+
73
+ >> items.size
74
+ => 0
75
+
76
+ == レコードを追加する
77
+
78
+ <tt>Items</tt>テーブルにレコードを追加します。
79
+
80
+ >> items.add("http://ja.wikipedia.org/wiki/Ruby")
81
+ => #<Groonga::Record ...>
82
+ >> items.add("http://www.ruby-lang.org/ja/")
83
+ => #<Groonga::Record ...>
84
+
85
+ 件数を確認すると確かに2件増えています。
86
+
87
+ >> items.size
88
+ => 2
89
+
90
+ 主キーを指定してレコードを取り出す時には以下のようにします。
91
+
92
+ >> items["http://ja.wikipedia.org/wiki/Ruby"]
93
+ => #<Groonga::Record ...>
94
+
95
+ == 全文検索を行う
96
+
97
+ 各itemのタイトル文字列を登録して、全文検索できるようにしてみ
98
+ ましょう。
99
+
100
+ まず<tt>Items</tt>テーブルに+title+という名前のカラムを追加し
101
+ ます。ここでは、<tt>Text</tt>型のデータを持つカラムとして定義
102
+ します。
103
+
104
+ >> Groonga::Schema.change_table("Items") do |table|
105
+ ?> table.text("title")
106
+ >> end
107
+ => [...]
108
+
109
+ 定義したカラムは「#{テーブル名}.#{カラム名}」という名前になります。
110
+ テーブルと同じようにGroonga.[]で参照できます。
111
+
112
+ >> title_column = Groonga["Items.title"]
113
+ => #<Groonga::VariableSizeColumn ...>
114
+
115
+ 全文検索するために、文字列を分解して得られる各単語を格納する
116
+ ためのテーブルを別途用意します。ここではTermsという名前でテー
117
+ ブルを定義します。
118
+
119
+ >> Groonga::Schema.create_table("Terms",
120
+ ?> :type => :patricia_trie,
121
+ ?> :key_normalize => true,
122
+ ?> :default_tokenizer => "TokenBigram")
123
+
124
+ ここでは、トークナイザとして<tt>:default_tokenzier =>
125
+ "TokenBigram"</tt> を指定しています。トークナイザとは文字列を
126
+ 単語に分解するオブジェクトのことです。デフォルトではトークナ
127
+ イザは指定されていません。全文検索を利用するためにはトークナ
128
+ イザを指定する必要があるので、ここではN-gramの一種であるバイ
129
+ グラムを指定しています。
130
+
131
+ N-gramを利用した全文検索では、分解したN文字とその出現位置を利
132
+ 用して全文検索を行います。N-gramのNは文字列を何文字毎に分解す
133
+ るかの文字数になります。groongaは1文字で分解するユニグラム、
134
+ 2文字のバイグラム、3文字のトリグラムをサポートしています。
135
+
136
+ また、大文字小文字の区別なく検索するために
137
+ <tt>:key_normalize => true</tt>も指定しています。
138
+
139
+ 単語格納用テーブルの準備ができたので、<tt>Items</tt>テーブ
140
+ ルの+title+カラムに対するインデックスを定義します。
141
+
142
+ >> Groonga::Schema.change_table("Terms") do |table|
143
+ ?> table.index("Items.title")
144
+ >> end
145
+ => [...]
146
+
147
+ 少し違和感を感じるかも知れませんが、<tt>Items</tt>テーブル
148
+ のカラムに対するインデックスは、<tt>Terms</tt>テーブルのカ
149
+ ラムとして定義します。
150
+
151
+ <tt>Items</tt>にレコードが登録されると、その中に含まれる単
152
+ 語に該当するレコードが<tt>Terms</tt>に自動的に追加されるよ
153
+ うになります。
154
+
155
+ <tt>Terms</tt>は、文書に含まれる語彙に相当する、やや特殊な
156
+ テーブルだと言えます。しかし、他のテーブルと同様に語彙テーブ
157
+ ルには自由にカラムを追加し、単語毎の様々な属性を管理すること
158
+ ができます。これはある種の検索処理を行う際には非常に便利に機
159
+ 能します。
160
+
161
+ これでテーブルの定義は完了です。
162
+
163
+ 先ほど登録した各レコードの+title+カラムに値をセットします。
164
+
165
+ >> items["http://ja.wikipedia.org/wiki/Ruby"].title = "Ruby"
166
+ => "Ruby"
167
+ >> items["http://www.ruby-lang.org/ja/"].title = "オブジェクトスクリプト言語Ruby"
168
+ "オブジェクトスクリプト言語Ruby"
169
+
170
+ 以下のようにして検索することができます。
171
+
172
+ >> ruby_items = items.select {|record| record.title =~ "Ruby"}
173
+ => #<Groonga::Hash ..., size: <2>>
174
+
175
+ 検索結果はGroonga::Hashで返されます。ハッシュのキーに見つかっ
176
+ た<tt>Items</tt>のレコードが入っています。
177
+
178
+ >> ruby_items.collect {|record| record.key.key}
179
+ => ["http://ja.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/ja/"]
180
+
181
+ 上の例では+record.key+で<tt>Items</tt>のレコードを取得して、
182
+ さらにそのキーを指定して(+record.key.key+)で<tt>Items</tt>
183
+ のキーを返しています。
184
+
185
+ +record["_key"]+でアクセスすると自動的に参照しているレコード
186
+ を辿っていき、参照先のキーにアクセスできます。
187
+
188
+ >> ruby_items.collect {|record| record["_key"]}
189
+ => ["http://ja.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/ja/"]
190
+
191
+ == マルチユーザ向けのブックマークアプリケーション
192
+
193
+ ここまでで作った単機能のアプリケーションをもう少し拡張して、
194
+ 複数のユーザが、それぞれにコメントを記入できるブックマークア
195
+ プリケーションにしてみましょう。
196
+
197
+ まず、ユーザ情報とコメント情報を格納するテーブルを追加して、
198
+ 下図のようなテーブル構成にします。
199
+
200
+ http://qwik.jp/senna/senna2.files/rect4605.png
201
+
202
+ まず、<tt>Users</tt>テーブルを追加します。
203
+
204
+ >> Groonga::Schema.create_table("Users", :type => :hash) do |table|
205
+ ?> table.text("name")
206
+ >> end
207
+ => [...]
208
+
209
+ 次に、<tt>Comments</tt>テーブルを追加します。
210
+
211
+ >> Groonga::Schema.create_table("Comments") do |table|
212
+ ?> table.reference("item")
213
+ >> table.reference("author", "Users")
214
+ >> table.text("content")
215
+ >> table.time("issued")
216
+ >> end
217
+ => [...]
218
+
219
+ <tt>Comments</tt>テーブルの+content+カラムを全文検索できる
220
+ ようにインデックスを定義します。
221
+
222
+ >> Groonga::Schema.change_table("Terms") do |table|
223
+ ?> table.index("Comments.content")
224
+ >> end
225
+ => [...]
226
+
227
+ これでテーブルが定義できました。
228
+
229
+ 続いてユーザを何人か追加します。
230
+
231
+ >> users = Groonga["Users"]
232
+ => #<Groonga::Hash ...>
233
+ >> users.add("moritan", :name => "モリタン")
234
+ => #<Groonga::Record ...>
235
+ >> users.add("taporobo", :name => "タポロボ")
236
+ => #<Groonga::Record ...>
237
+
238
+ 次に、実際にユーザがブックマークを貼る時の処理を実行してみま
239
+ しょう。
240
+
241
+ ユーザ+moritan+が、Ruby関連のとあるページをブックマークしたと
242
+ 想定します。
243
+
244
+ まず対象のページが<tt>Items</tt>テーブルに登録済かどうか調
245
+ べます。
246
+
247
+ >> items.has_key?("http://www.rubyist.net/~matz/")
248
+ => false
249
+
250
+ 未登録なのでまず当該ページを<tt>Items</tt>に登録します。
251
+
252
+ >> items.add("http://www.rubyist.net/~matz/",
253
+ ?> :title => "Matzにっき")
254
+ => #<Groonga::Record ...>
255
+
256
+ 次に、登録したitemを+item+カラムの値に指定して
257
+ <tt>Comments</tt>にレコードを登録します。
258
+
259
+ >> require "time"
260
+ => true
261
+ >> comments = Groonga["Comments"]
262
+ => #<Groonga::Array ...>
263
+ >> comments.add(:item => "http://www.rubyist.net/~matz/",
264
+ ?> :author => "moritan",
265
+ ?> :content => "Ruby Matz",
266
+ ?> :issued => Time.parse("2010-11-20T18:01:22+09:00"))
267
+ => #<Groonga::Record ...>
268
+
269
+ == メソッド化
270
+
271
+ 上記の一連の手続きをメソッドにまとめてみます。
272
+
273
+ >> @items = items
274
+ => #<Groonga::Hash ...>
275
+ >> @comments = comments
276
+ => #<Groonga::Array ...>
277
+ >> def add_bookmark(url, title, author, content, issued)
278
+ >> item = @items[url] || @items.add(url, :title => title)
279
+ >> @comments.add(:item => item,
280
+ ?> :author => author,
281
+ ?> :content => content,
282
+ ?> :issued => issued)
283
+ >> end
284
+ => nil
285
+
286
+ +itmes+と+comments+をインスタンス変数に代入しているのはメソッ
287
+ ド内からでも見えるようにするためです。
288
+
289
+ +add_bookmark+は以下のような手順を実行しています。
290
+
291
+ * <tt>Items</tt>テーブルに該当ページのレコードがあるかどうか調べる。
292
+ * レコードがなければ追加する。
293
+ * <tt>Comments</tt>テーブルにレコードを登録する。
294
+
295
+ 作成したメソッドを呼び出していくつかブックマークを登録してみ
296
+ ましょう。
297
+
298
+ >> add_bookmark("http://jp.rubyist.net/magazine/",
299
+ ?> "Rubyist Magazine - るびま", "moritan", "Ruby 記事",
300
+ ?> Time.parse("2010-10-07T14:18:28+09:00"))
301
+ => #<Groonga::Record ...>
302
+ >> add_bookmark("http://groonga.rubyforge.org/",
303
+ ?> "Rubyでgroonga使って全文検索 - ラングバ", "taporobo",
304
+ ?> "Ruby groonga 全文検索",
305
+ ?> Time.parse("2010-11-11T12:39:59+09:00"))
306
+ => #<Groonga::Record ...>
307
+ >> add_bookmark("http://www.rubyist.net/~matz/",
308
+ ?> "Matz日記", "taporobo", "Ruby 日記",
309
+ ?> Time.parse("2010-07-28T20:46:23+09:00"))
310
+ => #<Groonga::Record ...>
311
+
312
+ == 全文検索その2
313
+
314
+ 登録したレコードに対して全文検索を実行してみます。
315
+
316
+ >> records = comments.select do |record|
317
+ ?> record["content"] =~ "Ruby"
318
+ >> end
319
+ => #<Groonga::Hash ...>
320
+ >> records.each do |record|
321
+ ?> record = record.key
322
+ >> p [record.id,
323
+ ?> record.issued,
324
+ ?> record.item.title,
325
+ ?> record.author.name,
326
+ ?> record.content]
327
+ >> end
328
+ [1, Sat Nov 20 18:01:22 +0900 2010, "Matzにっき", "モリタン", "Ruby Matz"]
329
+ [2, Thu Oct 07 14:18:28 +0900 2010, "Rubyist Magazine - るびま", "モリタン", "Ruby 記事"]
330
+ [3, Thu Nov 11 12:39:59 +0900 2010, "Rubyでgroonga使って全文検索 - ラングバ", "タポロボ", "Ruby groonga 全文検索検"]
331
+ [4, Wed Jul 28 20:46:23 +0900 2010, "Matzにっき", "タポロボ", "Ruby 日記"]
332
+
333
+ カラム名と同じメソッドでカラムへのアクセスできます。複合デー
334
+ タ型の要素も再帰的に辿ることができます。(同様の出力を普通の
335
+ RDBで実現するためには、<tt>Items</tt>テーブル、
336
+ <tt>Comments</tt>テーブル、<tt>Users</tt>テーブルのJOIN操作が
337
+ 必要になります。)
338
+
339
+ 上の式の中で、肝心の検索処理は、第一引数の式を評価する時点で
340
+ 完了していて、レコードセットオブジェクトとしてメモリに蓄積さ
341
+ れています。
342
+
343
+ >> records
344
+ #<Groonga::Hash ..., size: <4>>
345
+
346
+ レコードセットは、出力する前に様々に加工することができます。
347
+
348
+ 以下は、日付で降順にソートしてから出力した例です。
349
+
350
+ >> records.sort([{:key => "issued", :order => "descending"}]).each do |record|
351
+ ?> record = record.key
352
+ >> p [record.id,
353
+ ?> record.issued,
354
+ ?> record.item.title,
355
+ ?> record.author.name,
356
+ ?> record.content]
357
+ >> end
358
+ [1, Sat Nov 20 18:01:22 +0900 2010, "Matzにっき", "モリタン", "Ruby Matz"]
359
+ [3, Thu Nov 11 12:39:59 +0900 2010, "Rubyでgroonga使って全文検索 - ラングバ", "タポロボ", "Ruby groonga 全文検索"]
360
+ [2, Thu Oct 07 14:18:28 +0900 2010, "Rubyist Magazine - るびま", "モリタン", "Ruby 記事"]
361
+ [4, Wed Jul 28 20:46:23 +0900 2010, "Matzにっき, "タポロボ", "Ruby 日記"]
362
+ => [...]
363
+
364
+ 同じitemが何度も出てくると検索結果が見にくいので、item毎にグ
365
+ ループ化してみます。
366
+
367
+ >> records.group("item").each do |record|
368
+ ?> item = record.key
369
+ >> p [record.n_sub_records,
370
+ ?> item.key,
371
+ ?> item.title]
372
+ >> end
373
+ [2, "http://www.rubyist.net/~matz/", "Matzにっき"]
374
+ [1, "http://jp.rubyist.net/magazine/", "Rubyist Magazine - るびま"]
375
+ [1, "http://groonga.rubyforge.org/", "Rubyでgroonga使って全文検索 - ラングバ"]
376
+ => nil
377
+
378
+ +n_sub_records+というのはグループ化した単位に含まれるレコード
379
+ の件数を示します。SQLで言えば、GROUP BY句を含むクエリのcount
380
+ 関数のような働きです。
381
+
382
+ == 少し複雑な検索
383
+
384
+ さらに実用的な検索について考えてみましょう。
385
+
386
+ ブックマークが大量に蓄積されるに従って、より的確に適合度を算
387
+ 出する必要性に迫られます。
388
+
389
+ 今のところ検索対象として利用できるのは<tt>Items.title</tt>
390
+ と<tt>Comments.content</tt>ですが、<tt>Items.title</tt>は
391
+ 元ページから得られるやや信頼できる情報なのに対して、
392
+ <tt>Comments.content</tt>はブックマークユーザが任意に設定で
393
+ きる情報で、やや信憑性に乏しいと言えます。しかし、再現率を確
394
+ 保するためにはユーザのコメントも是非対象に含めたいところです。
395
+
396
+ そこで、以下のようなポリシーで検索を行うことにします。
397
+
398
+ * <tt>Items.title</tt>か<tt>Comments.content</tt>のいずれ
399
+ かにマッチするitemを検索する。
400
+ * ただし、<tt>Items.title</tt>にマッチしたレコードはスコア
401
+ を10倍重み付けする。
402
+ * 同一のitemに対して、キーワードにマッチする<tt>comment</tt>
403
+ が複数存在した場合は、それぞれの<tt>comment</tt>のスコアの
404
+ 和を、該当するitemのスコアとする。
405
+
406
+ 以下のようにして、commentとitemとそれぞれに対する検索結果を求
407
+ めます。
408
+
409
+ >> ruby_comments = @comments.select {|record| record.content =~ "Ruby"}
410
+ => #<Groonga::Hash ..., size: <4>
411
+ >> ruby_items = @items.select do |record|
412
+ ?> target = record.match_target do |match_record|
413
+ ?> match_record.title * 10
414
+ >> end
415
+ >> target =~ "Ruby"
416
+ >> end
417
+ #<Groonga::Hash ..., size: <4>>
418
+
419
+ _ruby_comments_の結果をitem毎にグループ化し、_ruby_items_と
420
+ unionして出力します。
421
+
422
+ >> ruby_items = ruby_comments.group("item").union!(ruby_items)
423
+ #<Groonga::Hash ..., size: <5>>
424
+ >> ruby_items.sort([{:key => "_score", :order => "descending"}]).each do |record|
425
+ >> p [record.score, record.title]
426
+ >> end
427
+ [10, "Rubyist Magazine - るびま"]
428
+ [10, "Ruby"]
429
+ [10, "Rubyでgroonga使って全文検索 - ラングバ"]
430
+ [10, "オブジェクトスクリプト言語Ruby"]
431
+ [2, "Matzにっき"]
432
+
433
+ これで目的の結果が得られました。