[Groonga-commit] groonga/groonga at 47d79c1 [master] select: add drilldown_adjuster

Back to archive index

Kouhei Sutou null+****@clear*****
Thu Feb 1 10:56:28 JST 2018


Kouhei Sutou	2018-02-01 10:56:28 +0900 (Thu, 01 Feb 2018)

  New Revision: 47d79c1670747073298e2e427af9cd9fc27fb7a9
  https://github.com/groonga/groonga/commit/47d79c1670747073298e2e427af9cd9fc27fb7a9

  Message:
    select: add drilldown_adjuster

  Added files:
    test/command/suite/select/drilldown/plain/adjuster/filter.expected
    test/command/suite/select/drilldown/plain/adjuster/filter.test
    test/command/suite/select/drilldown/plain/adjuster/no_filter.expected
    test/command/suite/select/drilldown/plain/adjuster/no_filter.test
  Modified files:
    lib/proc/proc_select.c

  Modified: lib/proc/proc_select.c (+110 -49)
===================================================================
--- lib/proc/proc_select.c    2018-01-31 10:04:26 +0900 (f902f160d)
+++ lib/proc/proc_select.c    2018-02-01 10:56:28 +0900 (c64c142da)
@@ -1,6 +1,6 @@
 /* -*- c-basic-offset: 2 -*- */
 /*
-  Copyright(C) 2009-2017 Brazil
+  Copyright(C) 2009-2018 Brazil
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -93,6 +93,7 @@ typedef struct {
   grn_table_group_flags calc_types;
   grn_raw_string calc_target_name;
   grn_raw_string filter;
+  grn_raw_string adjuster;
   grn_raw_string table_name;
   grn_columns columns;
   grn_table_group_result result;
@@ -960,6 +961,7 @@ grn_drilldown_data_init(grn_ctx *ctx,
   drilldown->calc_types = 0;
   GRN_RAW_STRING_INIT(drilldown->calc_target_name);
   GRN_RAW_STRING_INIT(drilldown->filter);
+  GRN_RAW_STRING_INIT(drilldown->adjuster);
   GRN_RAW_STRING_INIT(drilldown->table_name);
   grn_columns_init(ctx, &(drilldown->columns));
   drilldown->result.table = NULL;
@@ -999,6 +1001,7 @@ grn_drilldown_data_fill(grn_ctx *ctx,
                         grn_obj *calc_types,
                         grn_obj *calc_target,
                         grn_obj *filter,
+                        grn_obj *adjuster,
                         grn_obj *table)
 {
   GRN_RAW_STRING_FILL(drilldown->keys, keys);
@@ -1038,6 +1041,8 @@ grn_drilldown_data_fill(grn_ctx *ctx,
 
   GRN_RAW_STRING_FILL(drilldown->filter, filter);
 
+  GRN_RAW_STRING_FILL(drilldown->adjuster, adjuster);
+
   GRN_RAW_STRING_FILL(drilldown->table_name, table);
 }
 
@@ -1657,29 +1662,35 @@ grn_select_apply_adjuster_execute(grn_ctx *ctx,
 
 static grn_bool
 grn_select_apply_adjuster(grn_ctx *ctx,
-                          grn_select_data *data)
+                          grn_select_data *data,
+                          grn_raw_string *adjuster_string,
+                          grn_obj *target,
+                          grn_obj *result,
+                          const char *log_tag_prefix,
+                          const char *query_log_tag_prefix)
 {
   grn_obj *adjuster;
   grn_obj *record;
   grn_rc rc;
 
-  if (data->adjuster.length == 0) {
+  if (adjuster_string->length == 0) {
     return GRN_TRUE;
   }
 
-  GRN_EXPR_CREATE_FOR_QUERY(ctx, data->tables.target, adjuster, record);
+  GRN_EXPR_CREATE_FOR_QUERY(ctx, target, adjuster, record);
   if (!adjuster) {
     GRN_PLUGIN_ERROR(ctx,
                      GRN_INVALID_ARGUMENT,
-                     "[select][adjuster] "
+                     "%s[adjuster] "
                      "failed to create expression: %s",
+                     log_tag_prefix,
                      ctx->errbuf);
     return GRN_FALSE;
   }
 
   rc = grn_expr_parse(ctx, adjuster,
-                      data->adjuster.value,
-                      data->adjuster.length,
+                      adjuster_string->value,
+                      adjuster_string->length,
                       NULL,
                       GRN_OP_MATCH, GRN_OP_ADJUST,
                       GRN_EXPR_SYNTAX_ADJUSTER);
@@ -1687,19 +1698,23 @@ grn_select_apply_adjuster(grn_ctx *ctx,
     grn_obj_unlink(ctx, adjuster);
     GRN_PLUGIN_ERROR(ctx,
                      rc,
-                     "[select][adjuster] "
+                     "%s[adjuster] "
                      "failed to parse: %s",
+                     log_tag_prefix,
                      ctx->errbuf);
     return GRN_FALSE;
   }
 
   data->cacheable *= ((grn_expr *)adjuster)->cacheable;
   data->taintable += ((grn_expr *)adjuster)->taintable;
-  grn_select_apply_adjuster_execute(ctx, data->tables.result, adjuster);
+  grn_select_apply_adjuster_execute(ctx, result, adjuster);
   grn_obj_unlink(ctx, adjuster);
 
   GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
-                ":", "adjust(%d)", grn_table_size(ctx, data->tables.result));
+                ":", "%s%sadjust(%d)",
+                query_log_tag_prefix ? query_log_tag_prefix : "",
+                query_log_tag_prefix ? "." : "",
+                grn_table_size(ctx, result));
 
   return GRN_TRUE;
 }
@@ -2099,16 +2114,38 @@ grn_select_drilldown_execute(grn_ctx *ctx,
                              grn_hash *drilldowns,
                              grn_id id)
 {
+  grn_bool success = GRN_TRUE;
   grn_table_sort_key *keys = NULL;
   unsigned int n_keys = 0;
   grn_obj *target_table = table;
   grn_drilldown_data *drilldown;
   grn_table_group_result *result;
+  grn_obj log_tag_prefix;
+  grn_obj query_log_tag_prefix;
 
   drilldown =
     (grn_drilldown_data *)grn_hash_get_value_(ctx, drilldowns, id, NULL);
-  result = &(drilldown->result);
 
+  GRN_TEXT_INIT(&log_tag_prefix, 0);
+  GRN_TEXT_INIT(&query_log_tag_prefix, 0);
+  grn_text_printf(ctx, &log_tag_prefix,
+                  "[select][drilldowns]%s%.*s%s",
+                  drilldown->label.length > 0 ? "[" : "",
+                  (int)(drilldown->label.length),
+                  drilldown->label.value,
+                  drilldown->label.length > 0 ? "]" : "");
+  GRN_TEXT_PUTC(ctx, &log_tag_prefix, '\0');
+  if (data->drilldown.keys.length == 0) {
+    grn_text_printf(ctx, &query_log_tag_prefix,
+                    "drilldowns[%.*s]",
+                    (int)(drilldown->label.length),
+                    drilldown->label.value);
+  } else {
+    GRN_TEXT_SETS(ctx, &query_log_tag_prefix, "drilldown");
+  }
+  GRN_TEXT_PUTC(ctx, &query_log_tag_prefix, '\0');
+
+  result = &(drilldown->result);
   result->limit = 1;
   result->flags = GRN_TABLE_GROUP_CALC_COUNT;
   result->op = 0;
@@ -2144,13 +2181,13 @@ grn_select_drilldown_execute(grn_ctx *ctx,
       }
       if (dependent_id == GRN_ID_NIL) {
         GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT,
-                         "[select][drilldowns][%.*s][table] "
+                         "%s[table] "
                          "nonexistent label: <%.*s>",
-                         (int)(drilldown->label.length),
-                         drilldown->label.value,
+                         GRN_TEXT_VALUE(&log_tag_prefix),
                          (int)(drilldown->table_name.length),
                          drilldown->table_name.value);
-        return GRN_FALSE;
+        success = GRN_FALSE;
+        goto exit;
       }
     } else {
       grn_drilldown_data *dependent_drilldown;
@@ -2175,7 +2212,8 @@ grn_select_drilldown_execute(grn_ctx *ctx,
                                        target_table, &n_keys);
     if (!keys) {
       GRN_PLUGIN_CLEAR_ERROR(ctx);
-      return GRN_FALSE;
+      success = GRN_FALSE;
+      goto exit;
     }
 
     result->key_end = n_keys - 1;
@@ -2209,7 +2247,8 @@ grn_select_drilldown_execute(grn_ctx *ctx,
   }
 
   if (!result->table) {
-    return GRN_FALSE;
+    success = GRN_FALSE;
+    goto exit;
   }
 
   if (drilldown->columns.initial) {
@@ -2226,14 +2265,12 @@ grn_select_drilldown_execute(grn_ctx *ctx,
     if (!expression) {
       GRN_PLUGIN_ERROR(ctx,
                        GRN_INVALID_ARGUMENT,
-                       "[select][drilldowns]%s%.*s%s[filter] "
+                       "%s[filter] "
                        "failed to create expression for filter: %s",
-                       drilldown->label.length > 0 ? "[" : "",
-                       (int)(drilldown->label.length),
-                       drilldown->label.value,
-                       drilldown->label.length > 0 ? "]" : "",
+                       GRN_TEXT_VALUE(&log_tag_prefix),
                        ctx->errbuf);
-      return GRN_FALSE;
+      success = GRN_FALSE;
+      goto exit;
     }
     grn_expr_parse(ctx,
                    expression,
@@ -2247,16 +2284,14 @@ grn_select_drilldown_execute(grn_ctx *ctx,
       grn_obj_close(ctx, expression);
       GRN_PLUGIN_ERROR(ctx,
                        GRN_INVALID_ARGUMENT,
-                       "[select][drilldowns]%s%.*s%s[filter] "
+                       "%s[filter] "
                        "failed to parse filter: <%.*s>: %s",
-                       drilldown->label.length > 0 ? "[" : "",
-                       (int)(drilldown->label.length),
-                       drilldown->label.value,
-                       drilldown->label.length > 0 ? "]" : "",
+                       GRN_TEXT_VALUE(&log_tag_prefix),
                        (int)(drilldown->filter.length),
                        drilldown->filter.value,
                        ctx->errbuf);
-      return GRN_FALSE;
+      success = GRN_FALSE;
+      goto exit;
     }
     drilldown->filtered_result = grn_table_select(ctx,
                                                   result->table,
@@ -2271,21 +2306,35 @@ grn_select_drilldown_execute(grn_ctx *ctx,
       }
       GRN_PLUGIN_ERROR(ctx,
                        GRN_INVALID_ARGUMENT,
-                       "[select][drilldowns]%s%.*s%s[filter] "
+                       "%s[filter] "
                        "failed to execute filter: <%.*s>: %s",
-                       drilldown->label.length > 0 ? "[" : "",
-                       (int)(drilldown->label.length),
-                       drilldown->label.value,
-                       drilldown->label.length > 0 ? "]" : "",
+                       GRN_TEXT_VALUE(&log_tag_prefix),
                        (int)(drilldown->filter.length),
                        drilldown->filter.value,
                        ctx->errbuf);
-      return GRN_FALSE;
+      success = GRN_FALSE;
+      goto exit;
     }
     grn_obj_close(ctx, expression);
   }
 
   {
+    grn_obj *adjuster_result_table;
+    if (drilldown->filtered_result) {
+      adjuster_result_table = drilldown->filtered_result;
+    } else {
+      adjuster_result_table = result->table;
+    }
+    grn_select_apply_adjuster(ctx,
+                              data,
+                              &(drilldown->adjuster),
+                              result->table,
+                              adjuster_result_table,
+                              GRN_TEXT_VALUE(&log_tag_prefix),
+                              GRN_TEXT_VALUE(&query_log_tag_prefix));
+  }
+
+  {
     unsigned int n_hits;
 
     if (drilldown->filtered_result) {
@@ -2293,20 +2342,17 @@ grn_select_drilldown_execute(grn_ctx *ctx,
     } else {
       n_hits = grn_table_size(ctx, result->table);
     }
-    if (data->drilldown.keys.length == 0) {
-      GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
-                    ":", "drilldowns[%.*s](%u)",
-                    (int)(drilldown->label.length),
-                    drilldown->label.value,
-                    n_hits);
-    } else {
-      GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
-                    ":", "drilldown(%u)",
-                    n_hits);
-    }
+    GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+                  ":", "%s(%u)",
+                  GRN_TEXT_VALUE(&query_log_tag_prefix),
+                  n_hits);
   }
 
-  return GRN_TRUE;
+exit :
+  GRN_OBJ_FIN(ctx, &log_tag_prefix);
+  GRN_OBJ_FIN(ctx, &query_log_tag_prefix);
+
+  return success;
 }
 
 typedef enum {
@@ -2543,6 +2589,7 @@ grn_select_prepare_drilldowns(grn_ctx *ctx,
         COPY(calc_types);
         COPY(calc_target_name);
         COPY(filter);
+        COPY(adjuster);
 
 #undef COPY
       }
@@ -2970,6 +3017,7 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
     drilldown->label.length + 1 +               \
     drilldown->calc_target_name.length + 1 +    \
     drilldown->filter.length + 1 +              \
+    drilldown->adjuster.length + 1 +            \
     drilldown->table_name.length + 1 +          \
     sizeof(int) * 2 +                           \
     sizeof(grn_table_group_flags)
@@ -3025,6 +3073,7 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
       PUT_CACHE_KEY(drilldown->label);                          \
       PUT_CACHE_KEY(drilldown->calc_target_name);               \
       PUT_CACHE_KEY(drilldown->filter);                         \
+      PUT_CACHE_KEY(drilldown->adjuster);                       \
       PUT_CACHE_KEY(drilldown->table_name);                     \
       grn_memcpy(cp, &(drilldown->offset), sizeof(int));        \
       cp += sizeof(int);                                        \
@@ -3146,7 +3195,13 @@ grn_select(grn_ctx *ctx, grn_select_data *data)
       /* For select results */
       data->output.n_elements = 1;
 
-      if (!grn_select_apply_adjuster(ctx, data)) {
+      if (!grn_select_apply_adjuster(ctx,
+                                     data,
+                                     &(data->adjuster),
+                                     data->tables.target,
+                                     data->tables.result,
+                                     "[select]",
+                                     NULL)) {
         goto exit;
       }
 
@@ -3458,6 +3513,8 @@ grn_select_data_fill_drilldowns(grn_ctx *ctx,
                                                     "drilldown_calc_target", -1),
                             grn_plugin_proc_get_var(ctx, user_data,
                                                     "drilldown_filter", -1),
+                            grn_plugin_proc_get_var(ctx, user_data,
+                                                    "drilldown_adjuster", -1),
                             NULL);
     return GRN_TRUE;
   } else {
@@ -3484,6 +3541,7 @@ grn_select_data_fill_drilldowns(grn_ctx *ctx,
       grn_obj *calc_types = NULL;
       grn_obj *calc_target = NULL;
       grn_obj *filter = NULL;
+      grn_obj *adjuster = NULL;
       grn_obj *table = NULL;
 
       grn_hash_cursor_get_value(ctx, cursor, (void **)&drilldown);
@@ -3539,6 +3597,7 @@ grn_select_data_fill_drilldowns(grn_ctx *ctx,
       GET_VAR(calc_types);
       GET_VAR(calc_target);
       GET_VAR(filter);
+      GET_VAR(adjuster);
       GET_VAR(table);
 
 #undef GET_VAR
@@ -3555,6 +3614,7 @@ grn_select_data_fill_drilldowns(grn_ctx *ctx,
                               calc_types,
                               calc_target,
                               filter,
+                              adjuster,
                               table);
     } GRN_HASH_EACH_END(ctx, cursor);
 
@@ -3714,7 +3774,7 @@ exit :
   return NULL;
 }
 
-#define N_VARS 26
+#define N_VARS 27
 #define DEFINE_VARS grn_expr_var vars[N_VARS]
 
 static void
@@ -3749,6 +3809,7 @@ init_vars(grn_ctx *ctx, grn_expr_var *vars)
   grn_plugin_expr_var_init(ctx, &(vars[23]), "drilldown_filter", -1);
   grn_plugin_expr_var_init(ctx, &(vars[24]), "sort_keys", -1);
   grn_plugin_expr_var_init(ctx, &(vars[25]), "drilldown_sort_keys", -1);
+  grn_plugin_expr_var_init(ctx, &(vars[26]), "drilldown_adjuster", -1);
 }
 
 void

  Added: test/command/suite/select/drilldown/plain/adjuster/filter.expected (+88 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/drilldown/plain/adjuster/filter.expected    2018-02-01 10:56:28 +0900 (e21a0dd78)
@@ -0,0 +1,88 @@
+table_create Categories TABLE_PAT_KEY ShortText
+[[0,0.0,0.0],true]
+table_create Tags TABLE_PAT_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Tags categories COLUMN_VECTOR|WITH_WEIGHT Categories
+[[0,0.0,0.0],true]
+table_create Memos TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Memos tags COLUMN_VECTOR Tags
+[[0,0.0,0.0],true]
+column_create Categories tags_categories COLUMN_INDEX|WITH_WEIGHT   Tags categories
+[[0,0.0,0.0],true]
+load --table Tags
+[
+{"_key": "groonga", "categories": {"full-text-search": 100}},
+{"_key": "mroonga", "categories": {"mysql": 100, "full-text-search": 80}},
+{"_key": "ruby", "categories": {"language": 100}}
+]
+[[0,0.0,0.0],3]
+load --table Memos
+[
+{
+  "_key": "Groonga is fast",
+  "tags": ["groonga"]
+},
+{
+  "_key": "Mroonga is also fast",
+  "tags": ["mroonga", "groonga"]
+},
+{
+  "_key": "Ruby is an object oriented script language",
+  "tags": ["ruby"]
+}
+]
+[[0,0.0,0.0],3]
+select Memos   --limit 0   --output_columns _id   --drilldown tags   --drilldown_filter '_key == "groonga"'   --drilldown_adjuster 'categories @ "full-text-search" * 2 + categories @ "mysql"'   --drilldown_output_columns _key,_nsubrecs,_score
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        3
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ]
+      ]
+    ],
+    [
+      [
+        1
+      ],
+      [
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "_nsubrecs",
+          "Int32"
+        ],
+        [
+          "_score",
+          "Int32"
+        ]
+      ],
+      [
+        "groonga",
+        2,
+        204
+      ]
+    ]
+  ]
+]
+#>select --drilldown "tags" --drilldown_adjuster "categories @ \"full-text-search\" * 2 + categories @ \"mysql\"" --drilldown_filter "_key == \"groonga\"" --drilldown_output_columns "_key,_nsubrecs,_score" --limit "0" --output_columns "_id" --table "Memos"
+#:000000000000000 select(3)
+#:000000000000000 filter(1)
+#:000000000000000 drilldown.adjust(1)
+#:000000000000000 drilldown(1)
+#:000000000000000 output(0)
+#:000000000000000 output.drilldown(1)
+#<000000000000000 rc=0

  Added: test/command/suite/select/drilldown/plain/adjuster/filter.test (+43 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/drilldown/plain/adjuster/filter.test    2018-02-01 10:56:28 +0900 (4612f4f5f)
@@ -0,0 +1,43 @@
+table_create Categories TABLE_PAT_KEY ShortText
+
+table_create Tags TABLE_PAT_KEY ShortText
+column_create Tags categories COLUMN_VECTOR|WITH_WEIGHT Categories
+
+table_create Memos TABLE_HASH_KEY ShortText
+column_create Memos tags COLUMN_VECTOR Tags
+
+column_create Categories tags_categories COLUMN_INDEX|WITH_WEIGHT \
+  Tags categories
+
+load --table Tags
+[
+{"_key": "groonga", "categories": {"full-text-search": 100}},
+{"_key": "mroonga", "categories": {"mysql": 100, "full-text-search": 80}},
+{"_key": "ruby", "categories": {"language": 100}}
+]
+
+load --table Memos
+[
+{
+  "_key": "Groonga is fast",
+  "tags": ["groonga"]
+},
+{
+  "_key": "Mroonga is also fast",
+  "tags": ["mroonga", "groonga"]
+},
+{
+  "_key": "Ruby is an object oriented script language",
+  "tags": ["ruby"]
+}
+]
+
+#@collect-query-log true
+select Memos \
+  --limit 0 \
+  --output_columns _id \
+  --drilldown tags \
+  --drilldown_filter '_key == "groonga"' \
+  --drilldown_adjuster 'categories @ "full-text-search" * 2 + categories @ "mysql"' \
+  --drilldown_output_columns _key,_nsubrecs,_score
+#@collect-query-log false

  Added: test/command/suite/select/drilldown/plain/adjuster/no_filter.expected (+97 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/drilldown/plain/adjuster/no_filter.expected    2018-02-01 10:56:28 +0900 (666c05906)
@@ -0,0 +1,97 @@
+table_create Categories TABLE_PAT_KEY ShortText
+[[0,0.0,0.0],true]
+table_create Tags TABLE_PAT_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Tags categories COLUMN_VECTOR|WITH_WEIGHT Categories
+[[0,0.0,0.0],true]
+table_create Memos TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Memos tags COLUMN_VECTOR Tags
+[[0,0.0,0.0],true]
+column_create Categories tags_categories COLUMN_INDEX|WITH_WEIGHT   Tags categories
+[[0,0.0,0.0],true]
+load --table Tags
+[
+{"_key": "groonga", "categories": {"full-text-search": 100}},
+{"_key": "mroonga", "categories": {"mysql": 100, "full-text-search": 80}},
+{"_key": "ruby", "categories": {"language": 100}}
+]
+[[0,0.0,0.0],3]
+load --table Memos
+[
+{
+  "_key": "Groonga is fast",
+  "tags": ["groonga"]
+},
+{
+  "_key": "Mroonga is also fast",
+  "tags": ["mroonga", "groonga"]
+},
+{
+  "_key": "Ruby is an object oriented script language",
+  "tags": ["ruby"]
+}
+]
+[[0,0.0,0.0],3]
+select Memos   --limit 0   --output_columns _id   --drilldown tags   --drilldown_adjuster 'categories @ "full-text-search" * 2 + categories @ "mysql"'   --drilldown_output_columns _key,_nsubrecs,_score
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        3
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ]
+      ]
+    ],
+    [
+      [
+        3
+      ],
+      [
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "_nsubrecs",
+          "Int32"
+        ],
+        [
+          "_score",
+          "Int32"
+        ]
+      ],
+      [
+        "groonga",
+        2,
+        203
+      ],
+      [
+        "mroonga",
+        1,
+        265
+      ],
+      [
+        "ruby",
+        1,
+        0
+      ]
+    ]
+  ]
+]
+#>select --drilldown "tags" --drilldown_adjuster "categories @ \"full-text-search\" * 2 + categories @ \"mysql\"" --drilldown_output_columns "_key,_nsubrecs,_score" --limit "0" --output_columns "_id" --table "Memos"
+#:000000000000000 select(3)
+#:000000000000000 drilldown.adjust(3)
+#:000000000000000 drilldown(3)
+#:000000000000000 output(0)
+#:000000000000000 output.drilldown(3)
+#<000000000000000 rc=0

  Added: test/command/suite/select/drilldown/plain/adjuster/no_filter.test (+42 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/drilldown/plain/adjuster/no_filter.test    2018-02-01 10:56:28 +0900 (74f67662e)
@@ -0,0 +1,42 @@
+table_create Categories TABLE_PAT_KEY ShortText
+
+table_create Tags TABLE_PAT_KEY ShortText
+column_create Tags categories COLUMN_VECTOR|WITH_WEIGHT Categories
+
+table_create Memos TABLE_HASH_KEY ShortText
+column_create Memos tags COLUMN_VECTOR Tags
+
+column_create Categories tags_categories COLUMN_INDEX|WITH_WEIGHT \
+  Tags categories
+
+load --table Tags
+[
+{"_key": "groonga", "categories": {"full-text-search": 100}},
+{"_key": "mroonga", "categories": {"mysql": 100, "full-text-search": 80}},
+{"_key": "ruby", "categories": {"language": 100}}
+]
+
+load --table Memos
+[
+{
+  "_key": "Groonga is fast",
+  "tags": ["groonga"]
+},
+{
+  "_key": "Mroonga is also fast",
+  "tags": ["mroonga", "groonga"]
+},
+{
+  "_key": "Ruby is an object oriented script language",
+  "tags": ["ruby"]
+}
+]
+
+#@collect-query-log true
+select Memos \
+  --limit 0 \
+  --output_columns _id \
+  --drilldown tags \
+  --drilldown_adjuster 'categories @ "full-text-search" * 2 + categories @ "mysql"' \
+  --drilldown_output_columns _key,_nsubrecs,_score
+#@collect-query-log false
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180201/17c058c8/attachment-0001.htm 



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