null+****@clear*****
null+****@clear*****
2012年 2月 9日 (木) 06:36:31 JST
Daijiro MORI 2012-02-09 06:36:31 +0900 (Thu, 09 Feb 2012) New Revision: 9a30869fc80684f2409e9095b85dc90e31a55b47 Log: added last_tf Modified files: lib/ii.c Modified: lib/ii.c (+17 -12) =================================================================== --- lib/ii.c 2012-02-08 23:15:08 +0900 (cd998ff) +++ lib/ii.c 2012-02-09 06:36:31 +0900 (346e2d8) @@ -6360,6 +6360,7 @@ typedef struct { uint32_t npostings; grn_id last_rid; uint32_t last_sid; + uint32_t last_tf; uint32_t last_pos; uint32_t offset_rid; uint32_t offset_sid; @@ -6469,14 +6470,17 @@ grn_ii_builder_flush(grn_ctx *ctx, grn_ii_builder *builder) } else { builder_counter *counter = &builder->counters[id - 1]; if (counter->last_rid == rid) { - outbuf[counter->offset + counter->nrecs]++; + counter->last_tf++; } else { - if (counter->last_rid) { counter->offset++; } - counter->last_sid = 0; - counter->last_pos = 0; + if (counter->last_rid) { + outbuf[counter->offset + counter->nrecs] = counter->last_tf; + counter->offset++; + } outbuf[counter->offset] = rid - counter->last_rid; counter->last_rid = rid; - outbuf[counter->offset + counter->nrecs] = 1; + counter->last_sid = 0; + counter->last_tf = 1; + counter->last_pos = 0; } outbuf[counter->nposts++] = pos - counter->last_pos; counter->last_pos = pos; @@ -6485,16 +6489,10 @@ grn_ii_builder_flush(grn_ctx *ctx, grn_ii_builder *builder) } } { - ssize_t r = write(builder->tmpfd, outbuf, pos * sizeof(uint32_t)); - if (r > 0) { builder->filepos += r; } - block->tail = builder->filepos; - } - builder->nblocks++; - GRN_FREE(outbuf); - { builder_counter *counter; grn_id tid, tid_max = grn_table_size(ctx, builder->tmp_lexicon); for (counter = builder->counters, tid = 1; tid <= tid_max; counter++, tid++) { + outbuf[counter->offset + counter->nrecs] = counter->last_tf; counter->nrecs = 0; counter->nposts = 0; counter->lastrec = 0; @@ -6503,6 +6501,13 @@ grn_ii_builder_flush(grn_ctx *ctx, grn_ii_builder *builder) counter->last_rid = 0; /* FIXME */ } } + { + ssize_t r = write(builder->tmpfd, outbuf, pos * sizeof(uint32_t)); + if (r > 0) { builder->filepos += r; } + block->tail = builder->filepos; + } + builder->nblocks++; + GRN_FREE(outbuf); builder->blockpos = 0; grn_obj_close(ctx, builder->tmp_lexicon); builder->tmp_lexicon = NULL;