[Groonga-commit] groonga/groonga [master] support prefix search with query syntax.

Back to archive index

null+****@clear***** null+****@clear*****
2010年 8月 25日 (水) 16:10:43 JST


Kouhei Sutou	2010-07-20 00:55:48 +0000 (Tue, 20 Jul 2010)

  New Revision: fe016e6d2966adc06c9035c66856671fed91a974

  Log:
    support prefix search with query syntax.

  Modified files:
    lib/expr.c

  Modified: lib/expr.c (+18 -13)
===================================================================
--- lib/expr.c    2010-08-25 07:07:23 +0000 (9a8ffbf)
+++ lib/expr.c    2010-07-20 00:55:48 +0000 (78535b4)
@@ -3910,19 +3910,24 @@ grn_table_select(grn_ctx *ctx, grn_obj *table, grn_obj *expr,
                   }
                 }
               } else {
-                /* table ?? si->index.domain ? */
-                grn_hash *pres;
-                if ((pres = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
-                                            GRN_OBJ_TABLE_HASH_KEY))) {
-                  grn_id *key;
-                  grn_table_search(ctx, table,
-                                   GRN_BULK_HEAD(si->query),
-                                   GRN_BULK_VSIZE(si->query),
-                                   si->op, (grn_obj *)pres, GRN_OP_OR);
-                  GRN_HASH_EACH(ctx, pres, id, &key, NULL, NULL, {
-                    grn_ii_at(ctx, (grn_ii *)index, *key, (grn_hash *)res, si->logical_op);
-                  });
-                  grn_hash_close(ctx, pres);
+                grn_obj *i = GRN_PTR_VALUE(&si->index);
+                grn_obj *domain = grn_ctx_at(ctx, i->header.domain);
+                if (domain) {
+                  grn_hash *pres;
+                  if ((pres = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+                                              GRN_OBJ_TABLE_HASH_KEY))) {
+                    grn_id *key;
+                    grn_table_search(ctx, domain,
+                                     GRN_BULK_HEAD(si->query),
+                                     GRN_BULK_VSIZE(si->query),
+                                     si->op, (grn_obj *)pres, GRN_OP_OR);
+                    grn_obj_unlink(ctx, domain);
+                    GRN_HASH_EACH(ctx, pres, id, &key, NULL, NULL, {
+                        grn_ii_at(ctx, (grn_ii *)index, *key, (grn_hash *)res, si->logical_op);
+                      });
+                    grn_hash_close(ctx, pres);
+                  }
+                  grn_obj_unlink(ctx, domain);
                 }
                 grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op);
                 done++;




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