[Groonga-commit] groonga/groonga [master] suggest: split learn code for suggest

Back to archive index

null+****@clear***** null+****@clear*****
2012年 3月 9日 (金) 16:14:06 JST


Kouhei Sutou	2012-03-09 16:14:06 +0900 (Fri, 09 Mar 2012)

  New Revision: 23c9c667897251ce072605f3fcf64d03b132d269

  Log:
    suggest: split learn code for suggest

  Modified files:
    plugins/suggest/suggest.c

  Modified: plugins/suggest/suggest.c (+31 -20)
===================================================================
--- plugins/suggest/suggest.c    2012-03-09 16:12:20 +0900 (9692021)
+++ plugins/suggest/suggest.c    2012-03-09 16:14:06 +0900 (1b0e655)
@@ -531,6 +531,33 @@ command_suggest(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_dat
   return NULL;
 }
 
+static void
+learn_for_suggest(grn_ctx *ctx, grn_obj *items, grn_id post_item_id,
+                  uint64_t key, uint64_t key_, grn_id pid, grn_obj *pairs,
+                  grn_obj *pairs_pre, grn_obj *pairs_post, grn_obj *pre_item,
+                  grn_obj *post_item, grn_obj *pairs_freq2, grn_obj *v1)
+{
+  char keybuf[GRN_TABLE_MAX_KEY_SIZE];
+  int keylen = grn_table_get_key(ctx, items, post_item_id,
+                                 keybuf, GRN_TABLE_MAX_KEY_SIZE);
+  grn_token *token = grn_token_open(ctx, items, keybuf, keylen, 1);
+  if (token) {
+    grn_id tid;
+    while ((tid = grn_token_next(ctx, token)) && tid != post_item_id) {
+      int added;
+      key = key_ + tid;
+      pid = grn_table_add(ctx, pairs, &key, sizeof(uint64_t), &added);
+      if (added) {
+	GRN_RECORD_SET(ctx, pre_item, tid);
+	grn_obj_set_value(ctx, pairs_pre, pid, pre_item, GRN_OBJ_SET);
+	grn_obj_set_value(ctx, pairs_post, pid, post_item, GRN_OBJ_SET);
+      }
+      grn_obj_set_value(ctx, pairs_freq2, pid, v1, GRN_OBJ_INCR);
+    }
+    grn_token_close(ctx, token);
+  }
+}
+
 static int
 learn(grn_ctx *ctx, grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
       grn_obj *seq, grn_obj *post_time, grn_obj *pairs)
@@ -565,7 +592,7 @@ learn(grn_ctx *ctx, grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
     grn_obj_set_value(ctx, items_last, post_item_id, post_time, GRN_OBJ_SET);
     if (post_type_id) {
       int added;
-      grn_id pid, tid, *ep, *es;
+      grn_id pid, *ep, *es;
       grn_obj pre_type, pre_time, pre_item;
       uint64_t key, key_ = ((uint64_t)post_item_id) << 32;
       grn_obj_set_value(ctx, items_freq2, post_item_id, &v1, GRN_OBJ_INCR);
@@ -599,25 +626,9 @@ learn(grn_ctx *ctx, grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
           grn_obj_set_value(ctx, pairs_freq0, pid, &v1, GRN_OBJ_INCR);
         }
       }
-      {
-        char keybuf[GRN_TABLE_MAX_KEY_SIZE];
-        int keylen = grn_table_get_key(ctx, items, post_item_id,
-                                       keybuf, GRN_TABLE_MAX_KEY_SIZE);
-        grn_token *token = grn_token_open(ctx, items, keybuf, keylen, 1);
-        if (token) {
-          while ((tid = grn_token_next(ctx, token)) && tid != post_item_id) {
-            key = key_ + tid;
-            pid = grn_table_add(ctx, pairs, &key, sizeof(uint64_t), &added);
-            if (added) {
-              GRN_RECORD_SET(ctx, &pre_item, tid);
-              grn_obj_set_value(ctx, pairs_pre, pid, &pre_item, GRN_OBJ_SET);
-              grn_obj_set_value(ctx, pairs_post, pid, post_item, GRN_OBJ_SET);
-            }
-            grn_obj_set_value(ctx, pairs_freq2, pid, &v1, GRN_OBJ_INCR);
-          }
-          grn_token_close(ctx, token);
-        }
-      }
+      learn_for_suggest(ctx, items, post_item_id, key, key_, pid, pairs,
+			pairs_pre, pairs_post, &pre_item, post_item,
+			pairs_freq2, &v1);
       GRN_OBJ_FIN(ctx, &pre_type);
       GRN_OBJ_FIN(ctx, &pre_time);
       GRN_OBJ_FIN(ctx, &pre_item);




Groonga-commit メーリングリストの案内
Back to archive index