void cw_close(CompoundWriter *cw) { OutStream *os = NULL; int i; if (cw->ids->size <= 0) { RAISE(STATE_ERROR, "Tried to merge compound file with no entries"); } os = cw->store->new_output(cw->store, cw->name); os_write_vint(os, ary_size(cw->file_entries)); /* Write the directory with all offsets at 0. * Remember the positions of directory entries so that we can adjust the * offsets later */ for (i = 0; i < ary_size(cw->file_entries); i++) { cw->file_entries[i].dir_offset = os_pos(os); os_write_u64(os, 0); /* for now */ os_write_string(os, cw->file_entries[i].name); } /* Open the files and copy their data into the stream. Remember the * locations of each file's data section. */ for (i = 0; i < ary_size(cw->file_entries); i++) { cw->file_entries[i].data_offset = os_pos(os); cw_copy_file(cw, &cw->file_entries[i], os); } /* Write the data offsets into the directory of the compound stream */ for (i = 0; i < ary_size(cw->file_entries); i++) { os_seek(os, cw->file_entries[i].dir_offset); os_write_u64(os, cw->file_entries[i].data_offset); } if (os) { os_close(os); } hs_destroy(cw->ids); ary_free(cw->file_entries); free(cw); }
void index_add_array(Index *self, char **fields) { int i; Document *doc = doc_new(); for (i = 0; i < ary_size(fields); i++) { doc_add_field(doc, df_add_data(df_new(self->def_field), estrdup(fields[i]))); } index_add_doc(self, doc); doc_destroy(doc); }
float simdef_idf_phrase(struct Similarity *s, const char *field, PhrasePosition *positions, int pp_cnt, Searcher *searcher) { float idf = 0.0; int i, j; for (i = 0; i < pp_cnt; i++) { char **terms = positions[i].terms; for (j = ary_size(terms) - 1; j >= 0; j--) { idf += sim_idf_term(s, field, terms[j], searcher); } } return idf; }