[Groonga-commit] groonga/groonga at 349fa9e [master] ii: support offline index construction with normalizer options

Zurück zum Archiv-Index

Kouhei Sutou null+****@clear*****
Thu Apr 26 06:42:57 JST 2018


Kouhei Sutou	2018-04-26 06:42:57 +0900 (Thu, 26 Apr 2018)

  New Revision: 349fa9e018c3048020cdcdc9a132f249620b1756
  https://github.com/groonga/groonga/commit/349fa9e018c3048020cdcdc9a132f249620b1756

  Message:
    ii: support offline index construction with normalizer options

  Modified files:
    lib/ii.c

  Modified: lib/ii.c (+18 -10)
===================================================================
--- lib/ii.c    2018-04-25 19:06:42 +0900 (0b767adb2)
+++ lib/ii.c    2018-04-26 06:42:57 +0900 (46fabd4a3)
@@ -11802,7 +11802,7 @@ typedef struct {
 
   grn_obj  *lexicon;    /* Block lexicon (to be closed) */
   grn_bool have_tokenizer;  /* Whether lexicon has tokenizer */
-  grn_obj  *normalizer; /* Lexicon's normalzier */
+  grn_bool have_normalizer; /* Whether lexicon has tokenizer */
 
   uint32_t n;   /* Number of integers appended to the current block */
   grn_id   rid; /* Record ID */
@@ -11856,7 +11856,7 @@ grn_ii_builder_init(grn_ctx *ctx, grn_ii_builder *builder,
 
   builder->lexicon = NULL;
   builder->have_tokenizer = GRN_FALSE;
-  builder->normalizer = NULL;
+  builder->have_normalizer = GRN_FALSE;
 
   builder->n = 0;
   builder->rid = GRN_ID_NIL;
@@ -11991,11 +11991,11 @@ grn_ii_builder_create_lexicon(grn_ctx *ctx, grn_ii_builder *builder)
   grn_table_flags flags;
   grn_obj *domain = grn_ctx_at(ctx, builder->ii->lexicon->header.domain);
   grn_obj *range = grn_ctx_at(ctx, DB_OBJ(builder->ii->lexicon)->range);
-  grn_obj *normalizer, *token_filters;
+  grn_obj *token_filters;
   grn_rc rc;
 
   rc = grn_table_get_info(ctx, builder->ii->lexicon, &flags, NULL,
-                          NULL, &normalizer, &token_filters);
+                          NULL, NULL, &token_filters);
   if (rc != GRN_SUCCESS) {
     return rc;
   }
@@ -12022,13 +12022,21 @@ grn_ii_builder_create_lexicon(grn_ctx *ctx, grn_ii_builder *builder)
     GRN_OBJ_FIN(ctx, &tokenizer);
   }
   if (rc == GRN_SUCCESS) {
-    builder->normalizer = normalizer;
-    rc = grn_obj_set_info(ctx, builder->lexicon,
-                          GRN_INFO_NORMALIZER, normalizer);
-    if (rc == GRN_SUCCESS) {
+    grn_obj normalizer;
+    GRN_TEXT_INIT(&normalizer, 0);
+    grn_table_get_normalizer_string(ctx,
+                                    builder->ii->lexicon,
+                                    &normalizer);
+    if (GRN_TEXT_LEN(&normalizer) > 0) {
+      builder->have_normalizer = GRN_TRUE;
       rc = grn_obj_set_info(ctx, builder->lexicon,
-                            GRN_INFO_TOKEN_FILTERS, token_filters);
+                            GRN_INFO_NORMALIZER, &normalizer);
     }
+    GRN_OBJ_FIN(ctx, &normalizer);
+  }
+  if (rc == GRN_SUCCESS) {
+    rc = grn_obj_set_info(ctx, builder->lexicon,
+                          GRN_INFO_TOKEN_FILTERS, token_filters);
   }
   if (rc != GRN_SUCCESS) {
     return rc;
@@ -12445,7 +12453,7 @@ grn_ii_builder_append_value(grn_ctx *ctx, grn_ii_builder *builder,
     builder->pos++;
   }
   if (value_size) {
-    if (!builder->have_tokenizer && !builder->normalizer) {
+    if (!builder->have_tokenizer && !builder->have_normalizer) {
       grn_id tid;
       switch (builder->lexicon->header.type) {
       case GRN_TABLE_PAT_KEY :
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180426/50ad4cb8/attachment-0001.htm 



More information about the Groonga-commit mailing list
Zurück zum Archiv-Index