rroonga 2.0.8-x86-mingw32 → 2.1.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (389) hide show
  1. data/README.textile +2 -2
  2. data/bin/groonga-index-dump +47 -0
  3. data/doc/text/news.textile +733 -0
  4. data/doc/text/tutorial.textile +535 -0
  5. data/example/bookmark.rb +1 -1
  6. data/ext/groonga/rb-grn-database.c +21 -24
  7. data/ext/groonga/rb-grn-double-array-trie.c +50 -58
  8. data/ext/groonga/rb-grn-exception.c +18 -1
  9. data/ext/groonga/rb-grn-hash.c +18 -3
  10. data/ext/groonga/rb-grn-index-column.c +50 -2
  11. data/ext/groonga/rb-grn-normalizer.c +83 -0
  12. data/ext/groonga/rb-grn-object.c +18 -14
  13. data/ext/groonga/rb-grn-patricia-trie.c +17 -2
  14. data/ext/groonga/rb-grn-query-logger.c +263 -0
  15. data/ext/groonga/rb-grn-snippet.c +6 -0
  16. data/ext/groonga/rb-grn-table-key-support.c +204 -13
  17. data/ext/groonga/rb-grn-table.c +124 -46
  18. data/ext/groonga/rb-grn.h +14 -3
  19. data/ext/groonga/rb-groonga.c +2 -0
  20. data/lib/1.8/groonga.so +0 -0
  21. data/lib/1.9/groonga.so +0 -0
  22. data/lib/groonga.rb +2 -1
  23. data/lib/groonga/database.rb +7 -0
  24. data/lib/groonga/dumper.rb +21 -2
  25. data/lib/groonga/index-column.rb +170 -0
  26. data/lib/groonga/query-logger.rb +129 -0
  27. data/lib/groonga/record.rb +32 -8
  28. data/lib/groonga/schema.rb +231 -288
  29. data/rroonga-build.rb +2 -2
  30. data/rroonga.gemspec +11 -7
  31. data/test/groonga-test-utils.rb +18 -6
  32. data/test/test-hash.rb +49 -20
  33. data/test/test-index-cursor.rb +4 -4
  34. data/{Gemfile → test/test-normalizer.rb} +9 -5
  35. data/test/test-pagination.rb +1 -1
  36. data/test/test-patricia-trie.rb +8 -0
  37. data/test/test-schema.rb +16 -13
  38. data/test/test-snippet.rb +5 -0
  39. data/test/test-table.rb +24 -12
  40. data/test/test-view.rb +0 -1
  41. data/vendor/local/bin/groonga-benchmark.exe +0 -0
  42. data/vendor/local/bin/groonga.exe +0 -0
  43. data/vendor/local/bin/libgroonga-0.dll +0 -0
  44. data/vendor/local/bin/libmecab-1.dll +0 -0
  45. data/vendor/local/bin/libmsgpack-3.dll +0 -0
  46. data/vendor/local/bin/libmsgpackc-2.dll +0 -0
  47. data/vendor/local/bin/mecab-config +2 -2
  48. data/vendor/local/bin/mecab.exe +0 -0
  49. data/vendor/local/etc/groonga/httpd/groonga-httpd.conf +2 -2
  50. data/vendor/local/include/groonga/groonga.h +25 -14
  51. data/vendor/local/include/groonga/groonga/normalizer.h +55 -0
  52. data/vendor/local/include/groonga/groonga/tokenizer.h +33 -13
  53. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.a +0 -0
  54. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.dll +0 -0
  55. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.dll.a +0 -0
  56. data/vendor/local/lib/groonga/plugins/query_expanders/tsv.la +2 -2
  57. data/vendor/local/lib/groonga/plugins/suggest/suggest.a +0 -0
  58. data/vendor/local/lib/groonga/plugins/suggest/suggest.dll +0 -0
  59. data/vendor/local/lib/groonga/plugins/suggest/suggest.dll.a +0 -0
  60. data/vendor/local/lib/groonga/plugins/suggest/suggest.la +2 -2
  61. data/vendor/local/lib/groonga/plugins/table/table.a +0 -0
  62. data/vendor/local/lib/groonga/plugins/table/table.dll +0 -0
  63. data/vendor/local/lib/groonga/plugins/table/table.dll.a +0 -0
  64. data/vendor/local/lib/groonga/plugins/table/table.la +2 -2
  65. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.a +0 -0
  66. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.dll +0 -0
  67. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.dll.a +0 -0
  68. data/vendor/local/lib/groonga/plugins/tokenizers/mecab.la +2 -2
  69. data/vendor/local/lib/libgroonga.a +0 -0
  70. data/vendor/local/lib/libgroonga.dll.a +0 -0
  71. data/vendor/local/lib/libgroonga.la +2 -2
  72. data/vendor/local/lib/libmecab.a +0 -0
  73. data/vendor/local/lib/libmecab.dll.a +0 -0
  74. data/vendor/local/lib/libmecab.la +1 -1
  75. data/vendor/local/lib/libmsgpack.a +0 -0
  76. data/vendor/local/lib/libmsgpack.dll.a +0 -0
  77. data/vendor/local/lib/libmsgpack.la +1 -1
  78. data/vendor/local/lib/libmsgpackc.a +0 -0
  79. data/vendor/local/lib/libmsgpackc.dll.a +0 -0
  80. data/vendor/local/lib/libmsgpackc.la +1 -1
  81. data/vendor/local/lib/pkgconfig/groonga.pc +3 -3
  82. data/vendor/local/libexec/mecab/mecab-cost-train.exe +0 -0
  83. data/vendor/local/libexec/mecab/mecab-dict-gen.exe +0 -0
  84. data/vendor/local/libexec/mecab/mecab-dict-index.exe +0 -0
  85. data/vendor/local/libexec/mecab/mecab-system-eval.exe +0 -0
  86. data/vendor/local/libexec/mecab/mecab-test-gen.exe +0 -0
  87. data/vendor/local/sbin/groonga-httpd-restart +9 -3
  88. data/vendor/local/share/doc/groonga/en/html/.buildinfo +1 -1
  89. data/vendor/local/share/doc/groonga/en/html/_sources/install/centos.txt +6 -6
  90. data/vendor/local/share/doc/groonga/en/html/_sources/install/debian.txt +3 -3
  91. data/vendor/local/share/doc/groonga/en/html/_sources/install/fedora.txt +4 -4
  92. data/vendor/local/share/doc/groonga/en/html/_sources/install/mac_os_x.txt +3 -3
  93. data/vendor/local/share/doc/groonga/en/html/_sources/install/others.txt +3 -3
  94. data/vendor/local/share/doc/groonga/en/html/_sources/install/solaris.txt +3 -3
  95. data/vendor/local/share/doc/groonga/en/html/_sources/install/ubuntu.txt +3 -42
  96. data/vendor/local/share/doc/groonga/en/html/_sources/install/windows.txt +16 -16
  97. data/vendor/local/share/doc/groonga/en/html/_sources/news.txt +59 -0
  98. data/vendor/local/share/doc/groonga/en/html/_sources/tutorial/match_columns.txt +129 -0
  99. data/vendor/local/share/doc/groonga/en/html/_static/doctools.js +0 -12
  100. data/vendor/local/share/doc/groonga/en/html/_static/searchtools.js +3 -3
  101. data/vendor/local/share/doc/groonga/en/html/characteristic.html +6 -6
  102. data/vendor/local/share/doc/groonga/en/html/community.html +6 -6
  103. data/vendor/local/share/doc/groonga/en/html/contribution.html +6 -6
  104. data/vendor/local/share/doc/groonga/en/html/contribution/development.html +5 -5
  105. data/vendor/local/share/doc/groonga/en/html/contribution/development/com.html +5 -5
  106. data/vendor/local/share/doc/groonga/en/html/contribution/development/document.html +5 -5
  107. data/vendor/local/share/doc/groonga/en/html/contribution/development/query.html +5 -5
  108. data/vendor/local/share/doc/groonga/en/html/contribution/development/release.html +5 -5
  109. data/vendor/local/share/doc/groonga/en/html/contribution/development/test.html +5 -5
  110. data/vendor/local/share/doc/groonga/en/html/contribution/documentation.html +5 -5
  111. data/vendor/local/share/doc/groonga/en/html/contribution/documentation/c-api.html +5 -5
  112. data/vendor/local/share/doc/groonga/en/html/contribution/documentation/i18n.html +5 -5
  113. data/vendor/local/share/doc/groonga/en/html/contribution/report.html +5 -5
  114. data/vendor/local/share/doc/groonga/en/html/development.html +6 -6
  115. data/vendor/local/share/doc/groonga/en/html/development/travis-ci.html +5 -5
  116. data/vendor/local/share/doc/groonga/en/html/genindex.html +6 -6
  117. data/vendor/local/share/doc/groonga/en/html/geolocation_search.html +6 -6
  118. data/vendor/local/share/doc/groonga/en/html/index.html +12 -12
  119. data/vendor/local/share/doc/groonga/en/html/install.html +10 -11
  120. data/vendor/local/share/doc/groonga/en/html/install/centos.html +11 -11
  121. data/vendor/local/share/doc/groonga/en/html/install/debian.html +8 -8
  122. data/vendor/local/share/doc/groonga/en/html/install/fedora.html +9 -9
  123. data/vendor/local/share/doc/groonga/en/html/install/mac_os_x.html +8 -8
  124. data/vendor/local/share/doc/groonga/en/html/install/others.html +8 -8
  125. data/vendor/local/share/doc/groonga/en/html/install/solaris.html +8 -8
  126. data/vendor/local/share/doc/groonga/en/html/install/ubuntu.html +16 -53
  127. data/vendor/local/share/doc/groonga/en/html/install/windows.html +16 -16
  128. data/vendor/local/share/doc/groonga/en/html/limitations.html +6 -6
  129. data/vendor/local/share/doc/groonga/en/html/news.html +146 -82
  130. data/vendor/local/share/doc/groonga/en/html/news/0.x.html +5 -5
  131. data/vendor/local/share/doc/groonga/en/html/news/1.0.x.html +5 -5
  132. data/vendor/local/share/doc/groonga/en/html/news/1.1.x.html +5 -5
  133. data/vendor/local/share/doc/groonga/en/html/news/1.2.x.html +5 -5
  134. data/vendor/local/share/doc/groonga/en/html/news/senna.html +5 -5
  135. data/vendor/local/share/doc/groonga/en/html/objects.inv +0 -0
  136. data/vendor/local/share/doc/groonga/en/html/reference.html +6 -6
  137. data/vendor/local/share/doc/groonga/en/html/reference/api.html +5 -5
  138. data/vendor/local/share/doc/groonga/en/html/reference/api/grn_expr.html +5 -5
  139. data/vendor/local/share/doc/groonga/en/html/reference/cast.html +5 -5
  140. data/vendor/local/share/doc/groonga/en/html/reference/command.html +5 -5
  141. data/vendor/local/share/doc/groonga/en/html/reference/command/command_version.html +5 -5
  142. data/vendor/local/share/doc/groonga/en/html/reference/command/output_format.html +5 -5
  143. data/vendor/local/share/doc/groonga/en/html/reference/command/return_code.html +5 -5
  144. data/vendor/local/share/doc/groonga/en/html/reference/commands/cache_limit.html +5 -5
  145. data/vendor/local/share/doc/groonga/en/html/reference/commands/check.html +5 -5
  146. data/vendor/local/share/doc/groonga/en/html/reference/commands/clearlock.html +5 -5
  147. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_create.html +5 -5
  148. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_list.html +5 -5
  149. data/vendor/local/share/doc/groonga/en/html/reference/commands/column_remove.html +5 -5
  150. data/vendor/local/share/doc/groonga/en/html/reference/commands/define_selector.html +5 -5
  151. data/vendor/local/share/doc/groonga/en/html/reference/commands/defrag.html +5 -5
  152. data/vendor/local/share/doc/groonga/en/html/reference/commands/delete.html +5 -5
  153. data/vendor/local/share/doc/groonga/en/html/reference/commands/dump.html +5 -5
  154. data/vendor/local/share/doc/groonga/en/html/reference/commands/load.html +5 -5
  155. data/vendor/local/share/doc/groonga/en/html/reference/commands/log_level.html +5 -5
  156. data/vendor/local/share/doc/groonga/en/html/reference/commands/log_put.html +5 -5
  157. data/vendor/local/share/doc/groonga/en/html/reference/commands/log_reopen.html +5 -5
  158. data/vendor/local/share/doc/groonga/en/html/reference/commands/quit.html +5 -5
  159. data/vendor/local/share/doc/groonga/en/html/reference/commands/register.html +5 -5
  160. data/vendor/local/share/doc/groonga/en/html/reference/commands/select.html +5 -5
  161. data/vendor/local/share/doc/groonga/en/html/reference/commands/shutdown.html +5 -5
  162. data/vendor/local/share/doc/groonga/en/html/reference/commands/status.html +5 -5
  163. data/vendor/local/share/doc/groonga/en/html/reference/commands/suggest.html +5 -5
  164. data/vendor/local/share/doc/groonga/en/html/reference/commands/table_create.html +5 -5
  165. data/vendor/local/share/doc/groonga/en/html/reference/commands/table_list.html +5 -5
  166. data/vendor/local/share/doc/groonga/en/html/reference/commands/table_remove.html +5 -5
  167. data/vendor/local/share/doc/groonga/en/html/reference/commands/view_add.html +5 -5
  168. data/vendor/local/share/doc/groonga/en/html/reference/commands_not_implemented/add.html +5 -5
  169. data/vendor/local/share/doc/groonga/en/html/reference/commands_not_implemented/get.html +5 -5
  170. data/vendor/local/share/doc/groonga/en/html/reference/commands_not_implemented/set.html +5 -5
  171. data/vendor/local/share/doc/groonga/en/html/reference/executables.html +5 -5
  172. data/vendor/local/share/doc/groonga/en/html/reference/executables/grnslap.html +5 -5
  173. data/vendor/local/share/doc/groonga/en/html/reference/executables/grntest.html +5 -5
  174. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-httpd.html +5 -5
  175. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-server-http.html +5 -5
  176. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-create-dataset.html +5 -5
  177. data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga.html +5 -5
  178. data/vendor/local/share/doc/groonga/en/html/reference/function.html +5 -5
  179. data/vendor/local/share/doc/groonga/en/html/reference/functions/edit_distance.html +5 -5
  180. data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_distance.html +5 -5
  181. data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_in_circle.html +5 -5
  182. data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_in_rectangle.html +5 -5
  183. data/vendor/local/share/doc/groonga/en/html/reference/functions/now.html +5 -5
  184. data/vendor/local/share/doc/groonga/en/html/reference/functions/rand.html +5 -5
  185. data/vendor/local/share/doc/groonga/en/html/reference/functions/snippet_html.html +5 -5
  186. data/vendor/local/share/doc/groonga/en/html/reference/grn_expr.html +5 -5
  187. data/vendor/local/share/doc/groonga/en/html/reference/grn_expr/query_syntax.html +5 -5
  188. data/vendor/local/share/doc/groonga/en/html/reference/grn_expr/script_syntax.html +5 -5
  189. data/vendor/local/share/doc/groonga/en/html/reference/indexing.html +5 -5
  190. data/vendor/local/share/doc/groonga/en/html/reference/log.html +5 -5
  191. data/vendor/local/share/doc/groonga/en/html/reference/output.html +5 -5
  192. data/vendor/local/share/doc/groonga/en/html/reference/pseudo_column.html +5 -5
  193. data/vendor/local/share/doc/groonga/en/html/reference/query_expanders.html +5 -5
  194. data/vendor/local/share/doc/groonga/en/html/reference/query_expanders/tsv.html +5 -5
  195. data/vendor/local/share/doc/groonga/en/html/reference/tokenizers.html +5 -5
  196. data/vendor/local/share/doc/groonga/en/html/reference/type.html +5 -5
  197. data/vendor/local/share/doc/groonga/en/html/search.html +6 -6
  198. data/vendor/local/share/doc/groonga/en/html/searchindex.js +1 -1
  199. data/vendor/local/share/doc/groonga/en/html/server.html +6 -6
  200. data/vendor/local/share/doc/groonga/en/html/server/gqtp.html +5 -5
  201. data/vendor/local/share/doc/groonga/en/html/server/http.html +5 -5
  202. data/vendor/local/share/doc/groonga/en/html/server/http/comparison.html +5 -5
  203. data/vendor/local/share/doc/groonga/en/html/server/http/groonga-httpd.html +5 -5
  204. data/vendor/local/share/doc/groonga/en/html/server/http/groonga.html +5 -5
  205. data/vendor/local/share/doc/groonga/en/html/spec.html +6 -6
  206. data/vendor/local/share/doc/groonga/en/html/spec/gqtp.html +5 -5
  207. data/vendor/local/share/doc/groonga/en/html/spec/search.html +5 -5
  208. data/vendor/local/share/doc/groonga/en/html/suggest.html +6 -6
  209. data/vendor/local/share/doc/groonga/en/html/suggest/completion.html +5 -5
  210. data/vendor/local/share/doc/groonga/en/html/suggest/correction.html +5 -5
  211. data/vendor/local/share/doc/groonga/en/html/suggest/introduction.html +5 -5
  212. data/vendor/local/share/doc/groonga/en/html/suggest/suggestion.html +5 -5
  213. data/vendor/local/share/doc/groonga/en/html/suggest/tutorial.html +5 -5
  214. data/vendor/local/share/doc/groonga/en/html/troubleshooting.html +6 -6
  215. data/vendor/local/share/doc/groonga/en/html/troubleshooting/different_results_with_the_same_keyword.html +5 -5
  216. data/vendor/local/share/doc/groonga/en/html/tutorial.html +8 -7
  217. data/vendor/local/share/doc/groonga/en/html/tutorial/data.html +5 -5
  218. data/vendor/local/share/doc/groonga/en/html/tutorial/drilldown.html +5 -5
  219. data/vendor/local/share/doc/groonga/en/html/tutorial/index.html +5 -5
  220. data/vendor/local/share/doc/groonga/en/html/tutorial/introduction.html +5 -5
  221. data/vendor/local/share/doc/groonga/en/html/tutorial/lexicon.html +5 -5
  222. data/vendor/local/share/doc/groonga/en/html/tutorial/match_columns.html +265 -7
  223. data/vendor/local/share/doc/groonga/en/html/tutorial/micro_blog.html +5 -5
  224. data/vendor/local/share/doc/groonga/en/html/tutorial/network.html +5 -5
  225. data/vendor/local/share/doc/groonga/en/html/tutorial/patricia_trie.html +5 -5
  226. data/vendor/local/share/doc/groonga/en/html/tutorial/query_expansion.html +5 -5
  227. data/vendor/local/share/doc/groonga/en/html/tutorial/search.html +5 -5
  228. data/vendor/local/share/doc/groonga/ja/html/.buildinfo +1 -1
  229. data/vendor/local/share/doc/groonga/ja/html/_sources/install/centos.txt +6 -6
  230. data/vendor/local/share/doc/groonga/ja/html/_sources/install/debian.txt +3 -3
  231. data/vendor/local/share/doc/groonga/ja/html/_sources/install/fedora.txt +4 -4
  232. data/vendor/local/share/doc/groonga/ja/html/_sources/install/mac_os_x.txt +3 -3
  233. data/vendor/local/share/doc/groonga/ja/html/_sources/install/others.txt +3 -3
  234. data/vendor/local/share/doc/groonga/ja/html/_sources/install/solaris.txt +3 -3
  235. data/vendor/local/share/doc/groonga/ja/html/_sources/install/ubuntu.txt +3 -42
  236. data/vendor/local/share/doc/groonga/ja/html/_sources/install/windows.txt +16 -16
  237. data/vendor/local/share/doc/groonga/ja/html/_sources/news.txt +59 -0
  238. data/vendor/local/share/doc/groonga/ja/html/_sources/tutorial/match_columns.txt +129 -0
  239. data/vendor/local/share/doc/groonga/ja/html/_static/doctools.js +0 -12
  240. data/vendor/local/share/doc/groonga/ja/html/_static/searchtools.js +2 -2
  241. data/vendor/local/share/doc/groonga/ja/html/characteristic.html +6 -6
  242. data/vendor/local/share/doc/groonga/ja/html/community.html +6 -6
  243. data/vendor/local/share/doc/groonga/ja/html/contribution.html +9 -9
  244. data/vendor/local/share/doc/groonga/ja/html/contribution/development.html +5 -5
  245. data/vendor/local/share/doc/groonga/ja/html/contribution/development/com.html +5 -5
  246. data/vendor/local/share/doc/groonga/ja/html/contribution/development/document.html +5 -5
  247. data/vendor/local/share/doc/groonga/ja/html/contribution/development/query.html +5 -5
  248. data/vendor/local/share/doc/groonga/ja/html/contribution/development/release.html +5 -5
  249. data/vendor/local/share/doc/groonga/ja/html/contribution/development/test.html +5 -5
  250. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation.html +6 -6
  251. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/c-api.html +6 -6
  252. data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/i18n.html +6 -6
  253. data/vendor/local/share/doc/groonga/ja/html/contribution/report.html +5 -5
  254. data/vendor/local/share/doc/groonga/ja/html/development.html +6 -6
  255. data/vendor/local/share/doc/groonga/ja/html/development/travis-ci.html +5 -5
  256. data/vendor/local/share/doc/groonga/ja/html/genindex.html +6 -6
  257. data/vendor/local/share/doc/groonga/ja/html/geolocation_search.html +6 -6
  258. data/vendor/local/share/doc/groonga/ja/html/index.html +12 -12
  259. data/vendor/local/share/doc/groonga/ja/html/install.html +10 -11
  260. data/vendor/local/share/doc/groonga/ja/html/install/centos.html +11 -11
  261. data/vendor/local/share/doc/groonga/ja/html/install/debian.html +8 -8
  262. data/vendor/local/share/doc/groonga/ja/html/install/fedora.html +9 -9
  263. data/vendor/local/share/doc/groonga/ja/html/install/mac_os_x.html +8 -8
  264. data/vendor/local/share/doc/groonga/ja/html/install/others.html +8 -8
  265. data/vendor/local/share/doc/groonga/ja/html/install/solaris.html +8 -8
  266. data/vendor/local/share/doc/groonga/ja/html/install/ubuntu.html +16 -51
  267. data/vendor/local/share/doc/groonga/ja/html/install/windows.html +16 -16
  268. data/vendor/local/share/doc/groonga/ja/html/limitations.html +6 -6
  269. data/vendor/local/share/doc/groonga/ja/html/news.html +126 -82
  270. data/vendor/local/share/doc/groonga/ja/html/news/0.x.html +5 -5
  271. data/vendor/local/share/doc/groonga/ja/html/news/1.0.x.html +5 -5
  272. data/vendor/local/share/doc/groonga/ja/html/news/1.1.x.html +5 -5
  273. data/vendor/local/share/doc/groonga/ja/html/news/1.2.x.html +5 -5
  274. data/vendor/local/share/doc/groonga/ja/html/news/senna.html +5 -5
  275. data/vendor/local/share/doc/groonga/ja/html/objects.inv +0 -0
  276. data/vendor/local/share/doc/groonga/ja/html/reference.html +6 -6
  277. data/vendor/local/share/doc/groonga/ja/html/reference/api.html +5 -5
  278. data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_expr.html +5 -5
  279. data/vendor/local/share/doc/groonga/ja/html/reference/cast.html +5 -5
  280. data/vendor/local/share/doc/groonga/ja/html/reference/command.html +5 -5
  281. data/vendor/local/share/doc/groonga/ja/html/reference/command/command_version.html +5 -5
  282. data/vendor/local/share/doc/groonga/ja/html/reference/command/output_format.html +5 -5
  283. data/vendor/local/share/doc/groonga/ja/html/reference/command/return_code.html +5 -5
  284. data/vendor/local/share/doc/groonga/ja/html/reference/commands/cache_limit.html +5 -5
  285. data/vendor/local/share/doc/groonga/ja/html/reference/commands/check.html +5 -5
  286. data/vendor/local/share/doc/groonga/ja/html/reference/commands/clearlock.html +5 -5
  287. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_create.html +5 -5
  288. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_list.html +5 -5
  289. data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_remove.html +5 -5
  290. data/vendor/local/share/doc/groonga/ja/html/reference/commands/define_selector.html +5 -5
  291. data/vendor/local/share/doc/groonga/ja/html/reference/commands/defrag.html +5 -5
  292. data/vendor/local/share/doc/groonga/ja/html/reference/commands/delete.html +5 -5
  293. data/vendor/local/share/doc/groonga/ja/html/reference/commands/dump.html +5 -5
  294. data/vendor/local/share/doc/groonga/ja/html/reference/commands/load.html +5 -5
  295. data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_level.html +5 -5
  296. data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_put.html +5 -5
  297. data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_reopen.html +5 -5
  298. data/vendor/local/share/doc/groonga/ja/html/reference/commands/quit.html +5 -5
  299. data/vendor/local/share/doc/groonga/ja/html/reference/commands/register.html +5 -5
  300. data/vendor/local/share/doc/groonga/ja/html/reference/commands/select.html +5 -5
  301. data/vendor/local/share/doc/groonga/ja/html/reference/commands/shutdown.html +5 -5
  302. data/vendor/local/share/doc/groonga/ja/html/reference/commands/status.html +5 -5
  303. data/vendor/local/share/doc/groonga/ja/html/reference/commands/suggest.html +5 -5
  304. data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_create.html +5 -5
  305. data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_list.html +5 -5
  306. data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_remove.html +5 -5
  307. data/vendor/local/share/doc/groonga/ja/html/reference/commands/view_add.html +5 -5
  308. data/vendor/local/share/doc/groonga/ja/html/reference/commands_not_implemented/add.html +5 -5
  309. data/vendor/local/share/doc/groonga/ja/html/reference/commands_not_implemented/get.html +5 -5
  310. data/vendor/local/share/doc/groonga/ja/html/reference/commands_not_implemented/set.html +5 -5
  311. data/vendor/local/share/doc/groonga/ja/html/reference/executables.html +5 -5
  312. data/vendor/local/share/doc/groonga/ja/html/reference/executables/grnslap.html +5 -5
  313. data/vendor/local/share/doc/groonga/ja/html/reference/executables/grntest.html +5 -5
  314. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-httpd.html +5 -5
  315. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-server-http.html +5 -5
  316. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-create-dataset.html +5 -5
  317. data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga.html +5 -5
  318. data/vendor/local/share/doc/groonga/ja/html/reference/function.html +5 -5
  319. data/vendor/local/share/doc/groonga/ja/html/reference/functions/edit_distance.html +5 -5
  320. data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_distance.html +5 -5
  321. data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_in_circle.html +5 -5
  322. data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_in_rectangle.html +5 -5
  323. data/vendor/local/share/doc/groonga/ja/html/reference/functions/now.html +5 -5
  324. data/vendor/local/share/doc/groonga/ja/html/reference/functions/rand.html +5 -5
  325. data/vendor/local/share/doc/groonga/ja/html/reference/functions/snippet_html.html +5 -5
  326. data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr.html +5 -5
  327. data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr/query_syntax.html +5 -5
  328. data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr/script_syntax.html +5 -5
  329. data/vendor/local/share/doc/groonga/ja/html/reference/indexing.html +5 -5
  330. data/vendor/local/share/doc/groonga/ja/html/reference/log.html +5 -5
  331. data/vendor/local/share/doc/groonga/ja/html/reference/output.html +5 -5
  332. data/vendor/local/share/doc/groonga/ja/html/reference/pseudo_column.html +5 -5
  333. data/vendor/local/share/doc/groonga/ja/html/reference/query_expanders.html +5 -5
  334. data/vendor/local/share/doc/groonga/ja/html/reference/query_expanders/tsv.html +5 -5
  335. data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers.html +5 -5
  336. data/vendor/local/share/doc/groonga/ja/html/reference/type.html +5 -5
  337. data/vendor/local/share/doc/groonga/ja/html/search.html +6 -6
  338. data/vendor/local/share/doc/groonga/ja/html/searchindex.js +1 -1
  339. data/vendor/local/share/doc/groonga/ja/html/server.html +6 -6
  340. data/vendor/local/share/doc/groonga/ja/html/server/gqtp.html +5 -5
  341. data/vendor/local/share/doc/groonga/ja/html/server/http.html +5 -5
  342. data/vendor/local/share/doc/groonga/ja/html/server/http/comparison.html +5 -5
  343. data/vendor/local/share/doc/groonga/ja/html/server/http/groonga-httpd.html +5 -5
  344. data/vendor/local/share/doc/groonga/ja/html/server/http/groonga.html +5 -5
  345. data/vendor/local/share/doc/groonga/ja/html/spec.html +6 -6
  346. data/vendor/local/share/doc/groonga/ja/html/spec/gqtp.html +5 -5
  347. data/vendor/local/share/doc/groonga/ja/html/spec/search.html +5 -5
  348. data/vendor/local/share/doc/groonga/ja/html/suggest.html +6 -6
  349. data/vendor/local/share/doc/groonga/ja/html/suggest/completion.html +5 -5
  350. data/vendor/local/share/doc/groonga/ja/html/suggest/correction.html +5 -5
  351. data/vendor/local/share/doc/groonga/ja/html/suggest/introduction.html +5 -5
  352. data/vendor/local/share/doc/groonga/ja/html/suggest/suggestion.html +5 -5
  353. data/vendor/local/share/doc/groonga/ja/html/suggest/tutorial.html +5 -5
  354. data/vendor/local/share/doc/groonga/ja/html/troubleshooting.html +6 -6
  355. data/vendor/local/share/doc/groonga/ja/html/troubleshooting/different_results_with_the_same_keyword.html +5 -5
  356. data/vendor/local/share/doc/groonga/ja/html/tutorial.html +8 -7
  357. data/vendor/local/share/doc/groonga/ja/html/tutorial/data.html +5 -5
  358. data/vendor/local/share/doc/groonga/ja/html/tutorial/drilldown.html +5 -5
  359. data/vendor/local/share/doc/groonga/ja/html/tutorial/index.html +5 -5
  360. data/vendor/local/share/doc/groonga/ja/html/tutorial/introduction.html +5 -5
  361. data/vendor/local/share/doc/groonga/ja/html/tutorial/lexicon.html +5 -5
  362. data/vendor/local/share/doc/groonga/ja/html/tutorial/match_columns.html +259 -7
  363. data/vendor/local/share/doc/groonga/ja/html/tutorial/micro_blog.html +5 -5
  364. data/vendor/local/share/doc/groonga/ja/html/tutorial/network.html +5 -5
  365. data/vendor/local/share/doc/groonga/ja/html/tutorial/patricia_trie.html +5 -5
  366. data/vendor/local/share/doc/groonga/ja/html/tutorial/query_expansion.html +5 -5
  367. data/vendor/local/share/doc/groonga/ja/html/tutorial/search.html +5 -5
  368. data/vendor/local/share/doc/groonga/source/example/tutorial/match_columns-nested-index-data-with-three-relationship.log +23 -0
  369. data/vendor/local/share/doc/groonga/source/example/tutorial/match_columns-nested-index-data.log +16 -0
  370. data/vendor/local/share/doc/groonga/source/example/tutorial/match_columns-nested-index-schema-with-three-relationship.log +30 -0
  371. data/vendor/local/share/doc/groonga/source/example/tutorial/match_columns-nested-index-schema.log +20 -0
  372. data/vendor/local/share/doc/groonga/source/example/tutorial/match_columns-nested-index-select-with-three-relationship.log +86 -0
  373. data/vendor/local/share/doc/groonga/source/example/tutorial/match_columns-nested-index-select.log +41 -0
  374. data/vendor/local/share/doc/groonga/source/install/centos.txt +6 -6
  375. data/vendor/local/share/doc/groonga/source/install/debian.txt +3 -3
  376. data/vendor/local/share/doc/groonga/source/install/fedora.txt +4 -4
  377. data/vendor/local/share/doc/groonga/source/install/mac_os_x.txt +3 -3
  378. data/vendor/local/share/doc/groonga/source/install/others.txt +3 -3
  379. data/vendor/local/share/doc/groonga/source/install/solaris.txt +3 -3
  380. data/vendor/local/share/doc/groonga/source/install/ubuntu.txt +3 -42
  381. data/vendor/local/share/doc/groonga/source/install/windows.txt +16 -16
  382. data/vendor/local/share/doc/groonga/source/news.txt +59 -0
  383. data/vendor/local/share/doc/groonga/source/tutorial/match_columns.txt +129 -0
  384. data/vendor/local/share/man/ja/man1/groonga.1 +338 -93
  385. data/vendor/local/share/man/man1/groonga.1 +341 -92
  386. metadata +1258 -1242
  387. data/AUTHORS +0 -5
  388. data/Rakefile +0 -203
  389. data/bin/groonga-query-log-extract +0 -117
@@ -0,0 +1,535 @@
1
+ h1. チュートリアル
2
+
3
+ このページでは簡単なアプリケーションの作成を通して
4
+ rroongaの操作方法を紹介します。
5
+
6
+ h2. インストール
7
+
8
+ rroongaはRubyGemsでインストールできます。
9
+
10
+ <pre>
11
+ !!!command_line
12
+ % sudo gem install rroonga
13
+ </pre>
14
+
15
+ h2. データベースの作成
16
+
17
+ 簡単なブックマークアプリケーション用のデータベースを作ってみ
18
+ ます。以下のようにgroongaライブラリを読み込んでirbを起動しま
19
+ す。
20
+
21
+ <pre>
22
+ !!!irb
23
+ % irb --simple-prompt -rubygems -rgroonga
24
+ >>
25
+ </pre>
26
+
27
+ まず、エンコーディングを設定します。ここではUTF-8を利用します。
28
+
29
+ <pre>
30
+ !!!irb
31
+ >> $KCODE = "UTF-8"
32
+ => "UTF-8"
33
+ >> Groonga::Context.default_options = {:encoding => :utf8}
34
+ => {:encoding=>:utf8}
35
+ </pre>
36
+
37
+ それでは、ファイルを指定してデータベースを作成します。
38
+
39
+ <pre>
40
+ !!!irb
41
+ >> Groonga::Database.create(:path => "/tmp/bookmark.db")
42
+ => #<Groonga::Database ...>
43
+ </pre>
44
+
45
+ ここで作成したデータベースは、これ以降、暗黙のうちに利用され
46
+ ます。最初にデータベースを作成したら特に意識する必要はありま
47
+ せん。
48
+
49
+ h2. テーブルの定義
50
+
51
+ groongaには以下の3種類のテーブルがあります。
52
+
53
+ - Groonga::Hash :=
54
+ ハッシュテーブル。主キーでレコードを管理します。キーと完全
55
+ 一致するレコードを非常に高速に検索することができます。
56
+ =:
57
+
58
+ - Groonga::PatriciaTrie :=
59
+ パトリシアトライ。ハッシュテーブルに比べて完全一致検索の速
60
+ 度がやや遅いですが、前方一致検索・共通接頭辞探索などの検索
61
+ が行えます。またカーソルを用いてキーの昇降順にレコードを取
62
+ り出すことができます。
63
+ =:
64
+
65
+ - Groonga::Array :=
66
+ 配列。主キーの存在しないテーブルです。レコードはIDによって
67
+ 識別します。
68
+ =:
69
+
70
+ ここではハッシュテーブルを利用して、 @Items@ という名前のテー
71
+ ブルを作成します。キーは文字列とします。
72
+
73
+ <pre>
74
+ !!!irb
75
+ >> Groonga::Schema.create_table("Items", :type => :hash)
76
+ => [...]
77
+ </pre>
78
+
79
+ これで @Items@ という名前のテーブルが作成できました。
80
+
81
+ 定義したテーブルはGroonga.[]で参照できます。
82
+
83
+ <pre>
84
+ !!!irb
85
+ >> items = Groonga["Items"]
86
+ => #<Groonga::Hash ...>
87
+ </pre>
88
+
89
+ テーブルはRubyのHashのように扱えます。
90
+
91
+ 例えば、以下のように @size@ でテーブルに登録されているレコード
92
+ の件数を取得できます。
93
+
94
+ <pre>
95
+ !!!irb
96
+ >> items.size
97
+ => 0
98
+ </pre>
99
+
100
+ h2. レコードを追加する
101
+
102
+ @Items@ テーブルにレコードを追加します。
103
+
104
+ <pre>
105
+ !!!irb
106
+ >> items.add("http://ja.wikipedia.org/wiki/Ruby")
107
+ => #<Groonga::Record ...>
108
+ >> items.add("http://www.ruby-lang.org/ja/")
109
+ => #<Groonga::Record ...>
110
+ </pre>
111
+
112
+ 件数を確認すると確かに2件増えています。
113
+
114
+ <pre>
115
+ !!!irb
116
+ >> items.size
117
+ => 2
118
+ </pre>
119
+
120
+ 主キーを指定してレコードを取り出す時には以下のようにします。
121
+
122
+ <pre>
123
+ !!!irb
124
+ >> items["http://ja.wikipedia.org/wiki/Ruby"]
125
+ => #<Groonga::Record ...>
126
+ </pre>
127
+
128
+ h2. 全文検索を行う
129
+
130
+ 各itemのタイトル文字列を登録して、全文検索できるようにしてみ
131
+ ましょう。
132
+
133
+ まず @Items@ テーブルに @title@ という名前のカラムを追加し
134
+ ます。ここでは、 @Text@ 型のデータを持つカラムとして定義
135
+ します。
136
+
137
+ <pre>
138
+ !!!irb
139
+ >> Groonga::Schema.change_table("Items") do |table|
140
+ ?> table.text("title")
141
+ >> end
142
+ => [...]
143
+ </pre>
144
+
145
+ 定義したカラムは @#{テーブル名}.#{カラム名}@ という名前になります。
146
+ テーブルと同じように {Groonga.[]} で参照できます。
147
+
148
+ <pre>
149
+ !!!irb
150
+ >> title_column = Groonga["Items.title"]
151
+ => #<Groonga::VariableSizeColumn ...>
152
+ </pre>
153
+
154
+ 全文検索するために、文字列を分解して得られる各単語を格納する
155
+ ためのテーブルを別途用意します。ここではTermsという名前でテー
156
+ ブルを定義します。
157
+
158
+ <pre>
159
+ !!!irb
160
+ >> Groonga::Schema.create_table("Terms",
161
+ ?> :type => :patricia_trie,
162
+ ?> :key_normalize => true,
163
+ ?> :default_tokenizer => "TokenBigram")
164
+ </pre>
165
+
166
+ ここでは、トークナイザとして<tt>:default_tokenzier =>
167
+ "TokenBigram"</tt> を指定しています。トークナイザとは文字列を
168
+ 単語に分解するオブジェクトのことです。デフォルトではトークナ
169
+ イザは指定されていません。全文検索を利用するためにはトークナ
170
+ イザを指定する必要があるので、ここではN-gramの一種であるバイ
171
+ グラムを指定しています。
172
+
173
+ N-gramを利用した全文検索では、分解したN文字とその出現位置を利
174
+ 用して全文検索を行います。N-gramのNは文字列を何文字毎に分解す
175
+ るかの文字数になります。groongaは1文字で分解するユニグラム、
176
+ 2文字のバイグラム、3文字のトリグラムをサポートしています。
177
+
178
+ また、大文字小文字の区別なく検索するために
179
+ @:key_normalize => true@ も指定しています。
180
+
181
+ 単語格納用テーブルの準備ができたので、 @Items@ テーブ
182
+ ルの @title@ カラムに対するインデックスを定義します。
183
+
184
+ <pre>
185
+ !!!irb
186
+ >> Groonga::Schema.change_table("Terms") do |table|
187
+ ?> table.index("Items.title")
188
+ >> end
189
+ => [...]
190
+ </pre>
191
+
192
+ 少し違和感を感じるかも知れませんが、 @Items@ テーブル
193
+ のカラムに対するインデックスは、 @Terms@ テーブルのカ
194
+ ラムとして定義します。
195
+
196
+ @Items@ にレコードが登録されると、その中に含まれる単
197
+ 語に該当するレコードが @Terms@ に自動的に追加されるよ
198
+ うになります。
199
+
200
+ @Terms@ は、文書に含まれる語彙に相当する、やや特殊な
201
+ テーブルだと言えます。しかし、他のテーブルと同様に語彙テーブ
202
+ ルには自由にカラムを追加し、単語毎の様々な属性を管理すること
203
+ ができます。これはある種の検索処理を行う際には非常に便利に機
204
+ 能します。
205
+
206
+ これでテーブルの定義は完了です。
207
+
208
+ 先ほど登録した各レコードの @title@ カラムに値をセットします。
209
+
210
+ <pre>
211
+ !!!irb
212
+ >> items["http://ja.wikipedia.org/wiki/Ruby"].title = "Ruby"
213
+ => "Ruby"
214
+ >> items["http://www.ruby-lang.org/ja/"].title = "オブジェクトスクリプト言語Ruby"
215
+ "オブジェクトスクリプト言語Ruby"
216
+ </pre>
217
+
218
+ 以下のようにして検索することができます。
219
+
220
+ <pre>
221
+ !!!irb
222
+ >> ruby_items = items.select {|record| record.title =~ "Ruby"}
223
+ => #<Groonga::Hash ..., size: <2>>
224
+ </pre>
225
+
226
+ 検索結果はGroonga::Hashで返されます。ハッシュのキーに見つかっ
227
+ た @Items@ のレコードが入っています。
228
+
229
+ <pre>
230
+ !!!irb
231
+ >> ruby_items.collect {|record| record.key.key}
232
+ => ["http://ja.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/ja/"]
233
+ </pre>
234
+
235
+ 上の例では @record.key@ で @Items@ のレコードを取得して、
236
+ さらにそのキーを指定して( @record.key.key@ )で @Items@
237
+ のキーを返しています。
238
+
239
+ @record["_key"]@ でアクセスすると自動的に参照しているレコード
240
+ を辿っていき、参照先のキーにアクセスできます。
241
+
242
+ <pre>
243
+ !!!irb
244
+ >> ruby_items.collect {|record| record["_key"]}
245
+ => ["http://ja.wikipedia.org/wiki/Ruby", "http://www.ruby-lang.org/ja/"]
246
+ </pre>
247
+
248
+ h2. マルチユーザ向けのブックマークアプリケーション
249
+
250
+ ここまでで作った単機能のアプリケーションをもう少し拡張して、
251
+ 複数のユーザが、それぞれにコメントを記入できるブックマークア
252
+ プリケーションにしてみましょう。
253
+
254
+ まず、ユーザ情報とコメント情報を格納するテーブルを追加して、
255
+ 下図のようなテーブル構成にします。
256
+
257
+ !http://qwik.jp/senna/senna2.files/rect4605.png!
258
+
259
+ まず、 @Users@ テーブルを追加します。
260
+
261
+ <pre>
262
+ !!!irb
263
+ >> Groonga::Schema.create_table("Users", :type => :hash) do |table|
264
+ ?> table.text("name")
265
+ >> end
266
+ => [...]
267
+ </pre>
268
+
269
+ 次に、 @Comments@ テーブルを追加します。
270
+
271
+ <pre>
272
+ !!!irb
273
+ >> Groonga::Schema.create_table("Comments") do |table|
274
+ ?> table.reference("item")
275
+ >> table.reference("author", "Users")
276
+ >> table.text("content")
277
+ >> table.time("issued")
278
+ >> end
279
+ => [...]
280
+ </pre>
281
+
282
+ @Comments@ テーブルの @content@ カラムを全文検索できる
283
+ ようにインデックスを定義します。
284
+
285
+ <pre>
286
+ !!!irb
287
+ >> Groonga::Schema.change_table("Terms") do |table|
288
+ ?> table.index("Comments.content")
289
+ >> end
290
+ => [...]
291
+ </pre>
292
+
293
+ これでテーブルが定義できました。
294
+
295
+ 続いてユーザを何人か追加します。
296
+
297
+ <pre>
298
+ !!!irb
299
+ >> users = Groonga["Users"]
300
+ => #<Groonga::Hash ...>
301
+ >> users.add("moritan", :name => "モリタン")
302
+ => #<Groonga::Record ...>
303
+ >> users.add("taporobo", :name => "タポロボ")
304
+ => #<Groonga::Record ...>
305
+ </pre>
306
+
307
+ 次に、実際にユーザがブックマークを貼る時の処理を実行してみま
308
+ しょう。
309
+
310
+ ユーザ @moritan@ が、Ruby関連のとあるページをブックマークしたと
311
+ 想定します。
312
+
313
+ まず対象のページが @Items@ テーブルに登録済かどうか調
314
+ べます。
315
+
316
+ <pre>
317
+ !!!irb
318
+ >> items.has_key?("http://www.rubyist.net/~matz/")
319
+ => false
320
+ </pre>
321
+
322
+ 未登録なのでまず当該ページを @Items@ に登録します。
323
+
324
+ <pre>
325
+ !!!irb
326
+ >> items.add("http://www.rubyist.net/~matz/",
327
+ ?> :title => "Matzにっき")
328
+ => #<Groonga::Record ...>
329
+ </pre>
330
+
331
+ 次に、登録したitemを @item@ カラムの値に指定して
332
+ @Comments@ にレコードを登録します。
333
+
334
+ <pre>
335
+ !!!irb
336
+ >> require "time"
337
+ => true
338
+ >> comments = Groonga["Comments"]
339
+ => #<Groonga::Array ...>
340
+ >> comments.add(:item => "http://www.rubyist.net/~matz/",
341
+ ?> :author => "moritan",
342
+ ?> :content => "Ruby Matz",
343
+ ?> :issued => Time.parse("2010-11-20T18:01:22+09:00"))
344
+ => #<Groonga::Record ...>
345
+ </pre>
346
+
347
+ h2. メソッド化
348
+
349
+ 上記の一連の手続きをメソッドにまとめてみます。
350
+
351
+ <pre>
352
+ !!!irb
353
+ >> @items = items
354
+ => #<Groonga::Hash ...>
355
+ >> @comments = comments
356
+ => #<Groonga::Array ...>
357
+ >> def add_bookmark(url, title, author, content, issued)
358
+ >> item = @items[url] || @items.add(url, :title => title)
359
+ >> @comments.add(:item => item,
360
+ ?> :author => author,
361
+ ?> :content => content,
362
+ ?> :issued => issued)
363
+ >> end
364
+ => nil
365
+ </pre>
366
+
367
+ @items@ と @comments@ をインスタンス変数に代入しているのはメ
368
+ ソッド内からでも見えるようにするためです。
369
+
370
+ @add_bookmark@ は以下のような手順を実行しています。
371
+
372
+ * @Items@ テーブルに該当ページのレコードがあるかどうか調べる。
373
+ * レコードがなければ追加する。
374
+ * @Comments@ テーブルにレコードを登録する。
375
+
376
+ 作成したメソッドを呼び出していくつかブックマークを登録してみ
377
+ ましょう。
378
+
379
+ <pre>
380
+ !!!irb
381
+ >> add_bookmark("http://jp.rubyist.net/magazine/",
382
+ ?> "Rubyist Magazine - るびま", "moritan", "Ruby 記事",
383
+ ?> Time.parse("2010-10-07T14:18:28+09:00"))
384
+ => #<Groonga::Record ...>
385
+ >> add_bookmark("http://groonga.rubyforge.org/",
386
+ ?> "Rubyでgroonga使って全文検索 - ラングバ", "taporobo",
387
+ ?> "Ruby groonga 全文検索",
388
+ ?> Time.parse("2010-11-11T12:39:59+09:00"))
389
+ => #<Groonga::Record ...>
390
+ >> add_bookmark("http://www.rubyist.net/~matz/",
391
+ ?> "Matz日記", "taporobo", "Ruby 日記",
392
+ ?> Time.parse("2010-07-28T20:46:23+09:00"))
393
+ => #<Groonga::Record ...>
394
+ </pre>
395
+
396
+ h2. 全文検索その2
397
+
398
+ 登録したレコードに対して全文検索を実行してみます。
399
+
400
+ <pre>
401
+ !!!irb
402
+ >> records = comments.select do |record|
403
+ ?> record["content"] =~ "Ruby"
404
+ >> end
405
+ => #<Groonga::Hash ...>
406
+ >> records.each do |record|
407
+ ?> comment = record.value
408
+ >> p [comment.id,
409
+ ?> comment.issued,
410
+ ?> comment.item.title,
411
+ ?> comment.author.name,
412
+ ?> comment.content]
413
+ >> end
414
+ [1, Sat Nov 20 18:01:22 +0900 2010, "Matzにっき", "モリタン", "Ruby Matz"]
415
+ [2, Thu Oct 07 14:18:28 +0900 2010, "Rubyist Magazine - るびま", "モリタン", "Ruby 記事"]
416
+ [3, Thu Nov 11 12:39:59 +0900 2010, "Rubyでgroonga使って全文検索 - ラングバ", "タポロボ", "Ruby groonga 全文検索検"]
417
+ [4, Wed Jul 28 20:46:23 +0900 2010, "Matzにっき", "タポロボ", "Ruby 日記"]
418
+ </pre>
419
+
420
+ カラム名と同じメソッドでカラムへのアクセスできます。複合デー
421
+ タ型の要素も再帰的に辿ることができます。(同様の出力を普通の
422
+ RDBで実現するためには、 @Items@ テーブル、
423
+ @Comments@ テーブル、 @Users@ テーブルのJOIN操作が
424
+ 必要になります。)
425
+
426
+ 上の式の中で、肝心の検索処理は、第一引数の式を評価する時点で
427
+ 完了していて、レコードセットオブジェクトとしてメモリに蓄積さ
428
+ れています。
429
+
430
+ <pre>
431
+ !!!irb
432
+ >> records
433
+ #<Groonga::Hash ..., size: <4>>
434
+ </pre>
435
+
436
+ レコードセットは、出力する前に様々に加工することができます。
437
+
438
+ 以下は、日付で降順にソートしてから出力した例です。
439
+
440
+ <pre>
441
+ !!!irb
442
+ >> records.sort([{:key => "issued", :order => "descending"}]).each do |record|
443
+ ?> comment = record.key
444
+ >> p [comment.id,
445
+ ?> comment.issued,
446
+ ?> comment.item.title,
447
+ ?> comment.author.name,
448
+ ?> comment.content]
449
+ >> end
450
+ [1, Sat Nov 20 18:01:22 +0900 2010, "Matzにっき", "モリタン", "Ruby Matz"]
451
+ [3, Thu Nov 11 12:39:59 +0900 2010, "Rubyでgroonga使って全文検索 - ラングバ", "タポロボ", "Ruby groonga 全文検索"]
452
+ [2, Thu Oct 07 14:18:28 +0900 2010, "Rubyist Magazine - るびま", "モリタン", "Ruby 記事"]
453
+ [4, Wed Jul 28 20:46:23 +0900 2010, "Matzにっき, "タポロボ", "Ruby 日記"]
454
+ => [...]
455
+ </pre>
456
+
457
+ 同じitemが何度も出てくると検索結果が見にくいので、item毎にグ
458
+ ループ化してみます。
459
+
460
+ <pre>
461
+ !!!irb
462
+ >> records.group("item").each do |record|
463
+ ?> item = record.key
464
+ >> p [record.n_sub_records,
465
+ ?> item.key,
466
+ ?> item.title]
467
+ >> end
468
+ [2, "http://www.rubyist.net/~matz/", "Matzにっき"]
469
+ [1, "http://jp.rubyist.net/magazine/", "Rubyist Magazine - るびま"]
470
+ [1, "http://groonga.rubyforge.org/", "Rubyでgroonga使って全文検索 - ラングバ"]
471
+ => nil
472
+ </pre>
473
+
474
+ @n_sub_records@ というのはグループ化した単位に含まれるレコード
475
+ の件数を示します。SQLで言えば、GROUP BY句を含むクエリのcount
476
+ 関数のような働きです。
477
+
478
+ h2. 少し複雑な検索
479
+
480
+ さらに実用的な検索について考えてみましょう。
481
+
482
+ ブックマークが大量に蓄積されるに従って、より的確に適合度を算
483
+ 出する必要性に迫られます。
484
+
485
+ 今のところ検索対象として利用できるのは @Items.title@
486
+ と @Comments.content@ ですが、 @Items.title@ は
487
+ 元ページから得られるやや信頼できる情報なのに対して、
488
+ @Comments.content@ はブックマークユーザが任意に設定で
489
+ きる情報で、やや信憑性に乏しいと言えます。しかし、再現率を確
490
+ 保するためにはユーザのコメントも是非対象に含めたいところです。
491
+
492
+ そこで、以下のようなポリシーで検索を行うことにします。
493
+
494
+ * @Items.title@ か @Comments.content@ のいずれ
495
+ かにマッチするitemを検索する。
496
+ * ただし、 @Items.title@ にマッチしたレコードはスコア
497
+ を10倍重み付けする。
498
+ * 同一のitemに対して、キーワードにマッチする @comment@
499
+ が複数存在した場合は、それぞれの @comment@ のスコアの
500
+ 和を、該当するitemのスコアとする。
501
+
502
+ 以下のようにして、commentとitemとそれぞれに対する検索結果を求
503
+ めます。
504
+
505
+ <pre>
506
+ !!!irb
507
+ >> ruby_comments = @comments.select {|record| record.content =~ "Ruby"}
508
+ => #<Groonga::Hash ..., size: <4>
509
+ >> ruby_items = @items.select do |record|
510
+ ?> target = record.match_target do |match_record|
511
+ ?> match_record.title * 10
512
+ >> end
513
+ >> target =~ "Ruby"
514
+ >> end
515
+ #<Groonga::Hash ..., size: <4>>
516
+ </pre>
517
+
518
+ _ruby_comments_の結果をitem毎にグループ化し、_ruby_items_と
519
+ unionして出力します。
520
+
521
+ <pre>
522
+ !!!irb
523
+ >> ruby_items = ruby_comments.group("item").union!(ruby_items)
524
+ #<Groonga::Hash ..., size: <5>>
525
+ >> ruby_items.sort([{:key => "_score", :order => "descending"}]).each do |record|
526
+ >> p [record.score, record.title]
527
+ >> end
528
+ [10, "Rubyist Magazine - るびま"]
529
+ [10, "Ruby"]
530
+ [10, "Rubyでgroonga使って全文検索 - ラングバ"]
531
+ [10, "オブジェクトスクリプト言語Ruby"]
532
+ [2, "Matzにっき"]
533
+ </pre>
534
+
535
+ これで目的の結果が得られました。