[Groonga-commit] ranguba/groonga-client-model at 0b9648b [master] Support tokenizer

Back to archive index

Kouhei Sutou null+****@clear*****
Fri Mar 3 09:28:09 JST 2017


Kouhei Sutou	2017-03-03 09:28:09 +0900 (Fri, 03 Mar 2017)

  New Revision: 0b9648bd1e23a40ccc91d88d20669a81b1b32e79
  https://github.com/ranguba/groonga-client-model/commit/0b9648bd1e23a40ccc91d88d20669a81b1b32e79

  Message:
    Support tokenizer

  Modified files:
    lib/groonga_client_model/migration.rb
    test/unit/test_migration.rb

  Modified: lib/groonga_client_model/migration.rb (+24 -1)
===================================================================
--- lib/groonga_client_model/migration.rb    2017-03-03 09:22:38 +0900 (8d9355c)
+++ lib/groonga_client_model/migration.rb    2017-03-03 09:28:09 +0900 (602ef50)
@@ -51,7 +51,11 @@ module GroongaClientModel
       end
     end
 
-    def create_table(name, type: nil, key_type: nil)
+    def create_table(name,
+                     type: nil,
+                     key_type: nil,
+                     tokenizer: nil,
+                     default_tokenizer: nil)
       return remove_table_raw(name) if @reverting
 
       type = normalize_table_type(type || :array)
@@ -59,13 +63,19 @@ module GroongaClientModel
         key_type ||= "ShortText"
       end
       key_type = normalize_type(key_type)
+      if type != "TABLE_NO_KEY" and key_type == "ShortText"
+        tokenizer ||= default_tokenizer
+        tokenizer = normalize_tokenizer(tokenizer)
+      end
       options = {type: type}
       options[:key_type] = key_type if key_type
+      options[:tokenizer] = tokenizer if tokenizer
       report(__method__, [name, options]) do
         @client.request(:table_create).
           parameter(:name, name).
           flags_parameter(:flags, [type]).
           parameter(:key_type, key_type).
+          parameter(:default_tokenizer, tokenizer).
           response
       end
 
@@ -191,6 +201,19 @@ module GroongaClientModel
       end
     end
 
+    def normalize_tokenizer(tokenizer)
+      case tokenizer.to_s
+      when /\A(?:token_?)?bigram\z/i
+        "TokenBigram"
+      when /\A(?:token_?)?delimit\z/i
+        "TokenDelimit"
+      when /\A(?:token_?)?mecab\z/i
+        "TokenMecab"
+      else
+        tokenizer
+      end
+    end
+
     def remove_table_raw(name)
       report(:remove_table, [name]) do
         @client.request(:table_remove).

  Modified: test/unit/test_migration.rb (+23 -0)
===================================================================
--- test/unit/test_migration.rb    2017-03-03 09:22:38 +0900 (b0df361)
+++ test/unit/test_migration.rb    2017-03-03 09:28:09 +0900 (e67b25f)
@@ -108,6 +108,29 @@ table_create terms TABLE_PAT_KEY ShortText
           end
         end
       end
+
+      test("tokenizer") do
+        expected_up_report = <<-REPORT
+-- create_table(:terms, {:type=>"TABLE_PAT_KEY", :key_type=>"ShortText", :tokenizer=>"TokenBigram"})
+   -> 0.0s
+        REPORT
+        expected_down_report = <<-REPORT
+-- remove_table(:terms)
+   -> 0.0s
+        REPORT
+        expected_dump = <<-DUMP.chomp
+table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram
+      DUMP
+        assert_migrate(expected_up_report,
+                       expected_down_report,
+                       expected_dump) do |migration|
+          migration.instance_eval do
+            create_table(:terms,
+                         :type => :patricia_trie,
+                         :tokenizer => :bigram)
+          end
+        end
+      end
     end
 
     sub_test_case("columns") do
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index