isomorfeus-ferret 0.17.2 → 0.17.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/isomorfeus_ferret_ext/benchmark.c +9 -20
- data/ext/isomorfeus_ferret_ext/benchmarks_all.h +1 -2
- data/ext/isomorfeus_ferret_ext/bm_hash.c +1 -2
- data/ext/isomorfeus_ferret_ext/brotli_dec_decode.c +4 -2
- data/ext/isomorfeus_ferret_ext/brotli_enc_encode.c +3 -2
- data/ext/isomorfeus_ferret_ext/frb_analysis.c +4 -5
- data/ext/isomorfeus_ferret_ext/frb_field_info.c +3 -4
- data/ext/isomorfeus_ferret_ext/frb_index.c +161 -187
- data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
- data/ext/isomorfeus_ferret_ext/frb_search.c +77 -69
- data/ext/isomorfeus_ferret_ext/frb_store.c +27 -13
- data/ext/isomorfeus_ferret_ext/frb_utils.c +3 -6
- data/ext/isomorfeus_ferret_ext/frt_analysis.c +39 -46
- data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
- data/ext/isomorfeus_ferret_ext/frt_array.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_bitvector.h +3 -6
- data/ext/isomorfeus_ferret_ext/frt_doc_field.c +87 -0
- data/ext/isomorfeus_ferret_ext/frt_doc_field.h +26 -0
- data/ext/isomorfeus_ferret_ext/frt_document.c +4 -97
- data/ext/isomorfeus_ferret_ext/frt_document.h +5 -33
- data/ext/isomorfeus_ferret_ext/frt_except.c +8 -6
- data/ext/isomorfeus_ferret_ext/frt_except.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_field_index.c +14 -33
- data/ext/isomorfeus_ferret_ext/frt_field_index.h +0 -6
- data/ext/isomorfeus_ferret_ext/frt_field_info.c +69 -0
- data/ext/isomorfeus_ferret_ext/frt_field_info.h +49 -0
- data/ext/isomorfeus_ferret_ext/frt_field_infos.c +196 -0
- data/ext/isomorfeus_ferret_ext/frt_field_infos.h +35 -0
- data/ext/isomorfeus_ferret_ext/frt_filter.c +2 -2
- data/ext/isomorfeus_ferret_ext/frt_global.c +10 -4
- data/ext/isomorfeus_ferret_ext/frt_global.h +11 -15
- data/ext/isomorfeus_ferret_ext/frt_hash.c +8 -8
- data/ext/isomorfeus_ferret_ext/frt_hash.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_hashset.c +20 -40
- data/ext/isomorfeus_ferret_ext/frt_hashset.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_helper.c +7 -15
- data/ext/isomorfeus_ferret_ext/frt_in_stream.c +35 -45
- data/ext/isomorfeus_ferret_ext/frt_in_stream.h +3 -2
- data/ext/isomorfeus_ferret_ext/frt_ind.c +21 -39
- data/ext/isomorfeus_ferret_ext/frt_ind.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_index.c +334 -848
- data/ext/isomorfeus_ferret_ext/frt_index.h +4 -105
- data/ext/isomorfeus_ferret_ext/frt_lang.c +5 -10
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc.c +3 -3
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.c +18 -25
- data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.h +5 -5
- data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +102 -70
- data/ext/isomorfeus_ferret_ext/frt_mempool.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_multimapper.c +23 -46
- data/ext/isomorfeus_ferret_ext/frt_multimapper.h +4 -8
- data/ext/isomorfeus_ferret_ext/frt_out_stream.c +31 -43
- data/ext/isomorfeus_ferret_ext/frt_out_stream.h +2 -2
- data/ext/isomorfeus_ferret_ext/frt_posh.c +6 -819
- data/ext/isomorfeus_ferret_ext/frt_posh.h +0 -57
- data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +131 -217
- data/ext/isomorfeus_ferret_ext/frt_q_const_score.c +2 -2
- data/ext/isomorfeus_ferret_ext/frt_q_filtered_query.c +4 -4
- data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +18 -26
- data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +27 -28
- data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
- data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +64 -116
- data/ext/isomorfeus_ferret_ext/frt_q_range.c +8 -14
- data/ext/isomorfeus_ferret_ext/frt_q_span.c +251 -365
- data/ext/isomorfeus_ferret_ext/frt_q_term.c +9 -9
- data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_ram_store.c +134 -85
- data/ext/isomorfeus_ferret_ext/frt_search.c +109 -191
- data/ext/isomorfeus_ferret_ext/frt_search.h +6 -6
- data/ext/isomorfeus_ferret_ext/frt_similarity.c +12 -23
- data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
- data/ext/isomorfeus_ferret_ext/frt_sort.c +20 -20
- data/ext/isomorfeus_ferret_ext/frt_store.c +13 -25
- data/ext/isomorfeus_ferret_ext/frt_store.h +86 -52
- data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_win32.h +5 -10
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +12 -11
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +11 -13
- data/ext/isomorfeus_ferret_ext/lz4.c +422 -195
- data/ext/isomorfeus_ferret_ext/lz4.h +114 -46
- data/ext/isomorfeus_ferret_ext/lz4frame.c +421 -242
- data/ext/isomorfeus_ferret_ext/lz4frame.h +122 -53
- data/ext/isomorfeus_ferret_ext/lz4hc.c +127 -111
- data/ext/isomorfeus_ferret_ext/lz4hc.h +14 -14
- data/ext/isomorfeus_ferret_ext/lz4xxhash.h +1 -1
- data/ext/isomorfeus_ferret_ext/mdbx.c +3762 -2526
- data/ext/isomorfeus_ferret_ext/mdbx.h +115 -70
- data/ext/isomorfeus_ferret_ext/test.c +41 -88
- data/ext/isomorfeus_ferret_ext/test.h +3 -6
- data/ext/isomorfeus_ferret_ext/test_1710.c +11 -13
- data/ext/isomorfeus_ferret_ext/test_analysis.c +32 -64
- data/ext/isomorfeus_ferret_ext/test_array.c +6 -12
- data/ext/isomorfeus_ferret_ext/test_bitvector.c +12 -24
- data/ext/isomorfeus_ferret_ext/test_document.c +23 -33
- data/ext/isomorfeus_ferret_ext/test_except.c +10 -21
- data/ext/isomorfeus_ferret_ext/test_fields.c +62 -68
- data/ext/isomorfeus_ferret_ext/test_file_deleter.c +16 -25
- data/ext/isomorfeus_ferret_ext/test_filter.c +22 -33
- data/ext/isomorfeus_ferret_ext/test_global.c +14 -29
- data/ext/isomorfeus_ferret_ext/test_hash.c +19 -38
- data/ext/isomorfeus_ferret_ext/test_hashset.c +8 -16
- data/ext/isomorfeus_ferret_ext/test_helper.c +4 -8
- data/ext/isomorfeus_ferret_ext/test_highlighter.c +16 -28
- data/ext/isomorfeus_ferret_ext/test_index.c +307 -519
- data/ext/isomorfeus_ferret_ext/test_lang.c +7 -14
- data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +2 -5
- data/ext/isomorfeus_ferret_ext/test_mempool.c +5 -10
- data/ext/isomorfeus_ferret_ext/test_multimapper.c +3 -6
- data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +9 -18
- data/ext/isomorfeus_ferret_ext/test_q_const_score.c +4 -6
- data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -4
- data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +9 -15
- data/ext/isomorfeus_ferret_ext/test_q_parser.c +8 -16
- data/ext/isomorfeus_ferret_ext/test_q_span.c +19 -35
- data/ext/isomorfeus_ferret_ext/test_ram_store.c +14 -13
- data/ext/isomorfeus_ferret_ext/test_search.c +66 -115
- data/ext/isomorfeus_ferret_ext/test_segments.c +8 -13
- data/ext/isomorfeus_ferret_ext/test_similarity.c +2 -4
- data/ext/isomorfeus_ferret_ext/test_sort.c +17 -27
- data/ext/isomorfeus_ferret_ext/test_store.c +96 -115
- data/ext/isomorfeus_ferret_ext/test_term.c +9 -15
- data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -14
- data/ext/isomorfeus_ferret_ext/test_test.c +4 -8
- data/ext/isomorfeus_ferret_ext/test_threading.c +15 -21
- data/ext/isomorfeus_ferret_ext/testhelper.c +11 -21
- data/ext/isomorfeus_ferret_ext/testhelper.h +1 -1
- data/ext/isomorfeus_ferret_ext/tests_all.h +1 -2
- data/lib/isomorfeus/ferret/index/index.rb +8 -8
- data/lib/isomorfeus/ferret/version.rb +1 -1
- metadata +32 -6
@@ -21,11 +21,11 @@ static float cssc_score(FrtScorer *self) {
|
|
21
21
|
}
|
22
22
|
|
23
23
|
static bool cssc_next(FrtScorer *self) {
|
24
|
-
return ((self->
|
24
|
+
return ((self->doc_num = frt_bv_scan_next(CScSc(self)->bv)) >= 0);
|
25
25
|
}
|
26
26
|
|
27
27
|
static bool cssc_skip_to(FrtScorer *self, int doc_num) {
|
28
|
-
return ((self->
|
28
|
+
return ((self->doc_num = frt_bv_scan_next_from(CScSc(self)->bv, doc_num)) >= 0);
|
29
29
|
}
|
30
30
|
|
31
31
|
static FrtExplanation *cssc_explain(FrtScorer *self, int doc_num) {
|
@@ -25,8 +25,8 @@ static bool fqsc_next(FrtScorer *self) {
|
|
25
25
|
FrtScorer *sub_sc = FQSc(self)->sub_scorer;
|
26
26
|
FrtBitVector *bv = FQSc(self)->bv;
|
27
27
|
while (sub_sc->next(sub_sc)) {
|
28
|
-
self->
|
29
|
-
if (frt_bv_get(bv, self->
|
28
|
+
self->doc_num = sub_sc->doc_num;
|
29
|
+
if (frt_bv_get(bv, self->doc_num)) return true;
|
30
30
|
}
|
31
31
|
return false;
|
32
32
|
}
|
@@ -36,8 +36,8 @@ static bool fqsc_skip_to(FrtScorer *self, int doc_num) {
|
|
36
36
|
FrtBitVector *bv = FQSc(self)->bv;
|
37
37
|
if (sub_sc->skip_to(sub_sc, doc_num)) {
|
38
38
|
do {
|
39
|
-
self->
|
40
|
-
if (frt_bv_get(bv, self->
|
39
|
+
self->doc_num = sub_sc->doc_num;
|
40
|
+
if (frt_bv_get(bv, self->doc_num)) {
|
41
41
|
return true;
|
42
42
|
}
|
43
43
|
} while (sub_sc->next(sub_sc));
|
@@ -10,36 +10,32 @@
|
|
10
10
|
#define MASc(scorer) ((MatchAllScorer *)(scorer))
|
11
11
|
|
12
12
|
typedef struct MatchAllScorer {
|
13
|
-
FrtScorer
|
14
|
-
FrtIndexReader
|
15
|
-
int
|
16
|
-
float
|
13
|
+
FrtScorer super;
|
14
|
+
FrtIndexReader *ir;
|
15
|
+
int max_doc_num;
|
16
|
+
float score;
|
17
17
|
} MatchAllScorer;
|
18
18
|
|
19
|
-
static float masc_score(FrtScorer *self)
|
20
|
-
{
|
19
|
+
static float masc_score(FrtScorer *self) {
|
21
20
|
return MASc(self)->score;
|
22
21
|
}
|
23
22
|
|
24
|
-
static bool masc_next(FrtScorer *self)
|
25
|
-
{
|
26
|
-
|
27
|
-
self->
|
28
|
-
if (!MASc(self)->ir->is_deleted(MASc(self)->ir, self->doc)) {
|
23
|
+
static bool masc_next(FrtScorer *self) {
|
24
|
+
while (self->doc_num < (MASc(self)->max_doc_num - 1)) {
|
25
|
+
self->doc_num++;
|
26
|
+
if (!MASc(self)->ir->is_deleted(MASc(self)->ir, self->doc_num)) {
|
29
27
|
return true;
|
30
28
|
}
|
31
29
|
}
|
32
30
|
return false;
|
33
31
|
}
|
34
32
|
|
35
|
-
static bool masc_skip_to(FrtScorer *self, int doc_num)
|
36
|
-
|
37
|
-
self->doc = doc_num - 1;
|
33
|
+
static bool masc_skip_to(FrtScorer *self, int doc_num) {
|
34
|
+
self->doc_num = doc_num - 1;
|
38
35
|
return masc_next(self);
|
39
36
|
}
|
40
37
|
|
41
|
-
static FrtExplanation *masc_explain(FrtScorer *self, int doc_num)
|
42
|
-
{
|
38
|
+
static FrtExplanation *masc_explain(FrtScorer *self, int doc_num) {
|
43
39
|
(void)self;
|
44
40
|
(void)doc_num;
|
45
41
|
return frt_expl_new(1.0, "MatchAllScorer");
|
@@ -54,9 +50,9 @@ static FrtScorer *masc_new(FrtWeight *weight, FrtIndexReader *ir) {
|
|
54
50
|
FrtScorer *self = frt_scorer_new(MatchAllScorer, weight->similarity);
|
55
51
|
MASc(self)->ir = ir;
|
56
52
|
FRT_REF(ir);
|
57
|
-
MASc(self)->
|
53
|
+
MASc(self)->max_doc_num = ir->max_doc_num(ir);
|
58
54
|
MASc(self)->score = weight->value;
|
59
|
-
self->
|
55
|
+
self->doc_num = -1;
|
60
56
|
self->score = &masc_score;
|
61
57
|
self->next = &masc_next;
|
62
58
|
self->skip_to = &masc_skip_to;
|
@@ -72,13 +68,11 @@ static FrtScorer *masc_new(FrtWeight *weight, FrtIndexReader *ir) {
|
|
72
68
|
*
|
73
69
|
***************************************************************************/
|
74
70
|
|
75
|
-
static char *maw_to_s(FrtWeight *self)
|
76
|
-
{
|
71
|
+
static char *maw_to_s(FrtWeight *self) {
|
77
72
|
return frt_strfmt("MatchAllWeight(%f)", self->value);
|
78
73
|
}
|
79
74
|
|
80
|
-
static FrtExplanation *maw_explain(FrtWeight *self, FrtIndexReader *ir, int doc_num)
|
81
|
-
{
|
75
|
+
static FrtExplanation *maw_explain(FrtWeight *self, FrtIndexReader *ir, int doc_num) {
|
82
76
|
FrtExplanation *expl;
|
83
77
|
if (!ir->is_deleted(ir, doc_num)) {
|
84
78
|
expl = frt_expl_new(self->value, "MatchAllQuery: product of:");
|
@@ -117,14 +111,12 @@ static char *maq_to_s(FrtQuery *self, ID default_field) {
|
|
117
111
|
}
|
118
112
|
}
|
119
113
|
|
120
|
-
static unsigned long long maq_hash(FrtQuery *self)
|
121
|
-
{
|
114
|
+
static unsigned long long maq_hash(FrtQuery *self) {
|
122
115
|
(void)self;
|
123
116
|
return 0;
|
124
117
|
}
|
125
118
|
|
126
|
-
static int maq_eq(FrtQuery *self, FrtQuery *o)
|
127
|
-
{
|
119
|
+
static int maq_eq(FrtQuery *self, FrtQuery *o) {
|
128
120
|
(void)self; (void)o;
|
129
121
|
return true;
|
130
122
|
}
|
@@ -54,34 +54,33 @@ static BoostedTerm *boosted_term_new(const char *term, float boost) {
|
|
54
54
|
#define TDE_READ_SIZE 16
|
55
55
|
|
56
56
|
typedef struct TermDocEnumWrapper {
|
57
|
-
const char
|
57
|
+
const char *term;
|
58
58
|
FrtTermDocEnum *tde;
|
59
|
-
float
|
60
|
-
int
|
61
|
-
int
|
62
|
-
int
|
63
|
-
int
|
64
|
-
int
|
65
|
-
int
|
59
|
+
float boost;
|
60
|
+
int doc_num;
|
61
|
+
int freq;
|
62
|
+
int doc_nums[TDE_READ_SIZE];
|
63
|
+
int freqs[TDE_READ_SIZE];
|
64
|
+
int pointer;
|
65
|
+
int pointer_max;
|
66
66
|
} TermDocEnumWrapper;
|
67
67
|
|
68
68
|
static bool tdew_less_than(const TermDocEnumWrapper *tdew1, const TermDocEnumWrapper *tdew2) {
|
69
|
-
return (tdew1->
|
69
|
+
return (tdew1->doc_num < tdew2->doc_num);
|
70
70
|
}
|
71
71
|
|
72
72
|
static bool tdew_next(TermDocEnumWrapper *self) {
|
73
73
|
self->pointer++;
|
74
74
|
if (self->pointer >= self->pointer_max) {
|
75
75
|
/* refill buffer */
|
76
|
-
self->pointer_max = self->tde->read(self->tde, self->
|
76
|
+
self->pointer_max = self->tde->read(self->tde, self->doc_nums, self->freqs, TDE_READ_SIZE);
|
77
77
|
if (self->pointer_max != 0) {
|
78
78
|
self->pointer = 0;
|
79
|
-
}
|
80
|
-
else {
|
79
|
+
} else {
|
81
80
|
return false;
|
82
81
|
}
|
83
82
|
}
|
84
|
-
self->
|
83
|
+
self->doc_num = self->doc_nums[self->pointer];
|
85
84
|
self->freq = self->freqs[self->pointer];
|
86
85
|
return true;
|
87
86
|
}
|
@@ -90,8 +89,8 @@ static bool tdew_skip_to(TermDocEnumWrapper *self, int doc_num) {
|
|
90
89
|
FrtTermDocEnum *tde = self->tde;
|
91
90
|
|
92
91
|
while (++(self->pointer) < self->pointer_max) {
|
93
|
-
if (self->
|
94
|
-
self->
|
92
|
+
if (self->doc_nums[self->pointer] >= doc_num) {
|
93
|
+
self->doc_num = self->doc_nums[self->pointer];
|
95
94
|
self->freq = self->freqs[self->pointer];
|
96
95
|
return true;
|
97
96
|
}
|
@@ -101,7 +100,7 @@ static bool tdew_skip_to(TermDocEnumWrapper *self, int doc_num) {
|
|
101
100
|
if (tde->skip_to(tde, doc_num)) {
|
102
101
|
self->pointer_max = 1;
|
103
102
|
self->pointer = 0;
|
104
|
-
self->
|
103
|
+
self->doc_nums[0] = self->doc_num = tde->doc_num(tde);
|
105
104
|
self->freqs[0] = self->freq = tde->freq(tde);
|
106
105
|
return true;
|
107
106
|
} else {
|
@@ -119,7 +118,7 @@ static TermDocEnumWrapper *tdew_new(const char *term, FrtTermDocEnum *tde, float
|
|
119
118
|
self->term = term;
|
120
119
|
self->tde = tde;
|
121
120
|
self->boost = boost;
|
122
|
-
self->
|
121
|
+
self->doc_num = -1;
|
123
122
|
return self;
|
124
123
|
}
|
125
124
|
|
@@ -145,11 +144,11 @@ typedef struct MultiTermScorer {
|
|
145
144
|
|
146
145
|
static float multi_tsc_score(FrtScorer *self) {
|
147
146
|
return MTSc(self)->total_score * MTSc(self)->weight_value
|
148
|
-
* frt_sim_decode_norm(self->similarity, MTSc(self)->norms[self->
|
147
|
+
* frt_sim_decode_norm(self->similarity, MTSc(self)->norms[self->doc_num]);
|
149
148
|
}
|
150
149
|
|
151
150
|
static bool multi_tsc_next(FrtScorer *self) {
|
152
|
-
int
|
151
|
+
int curr_doc_num;
|
153
152
|
float total_score = 0.0f;
|
154
153
|
TermDocEnumWrapper *tdew;
|
155
154
|
MultiTermScorer *mtsc = MTSc(self);
|
@@ -171,7 +170,7 @@ static bool multi_tsc_next(FrtScorer *self) {
|
|
171
170
|
return false;
|
172
171
|
}
|
173
172
|
|
174
|
-
self->
|
173
|
+
self->doc_num = curr_doc_num = tdew->doc_num;
|
175
174
|
do {
|
176
175
|
int freq = tdew->freq;
|
177
176
|
if (freq < SCORE_CACHE_SIZE) {
|
@@ -187,7 +186,7 @@ static bool multi_tsc_next(FrtScorer *self) {
|
|
187
186
|
}
|
188
187
|
|
189
188
|
} while (((tdew = (TermDocEnumWrapper *)frt_pq_top(tdew_pq)) != NULL)
|
190
|
-
&& tdew->
|
189
|
+
&& tdew->doc_num == curr_doc_num);
|
191
190
|
mtsc->total_score = total_score;
|
192
191
|
return true;
|
193
192
|
}
|
@@ -208,11 +207,11 @@ static bool multi_tsc_advance_to(FrtScorer *self, int target_doc_num) {
|
|
208
207
|
MTSc(self)->tdew_pq = tdew_pq;
|
209
208
|
}
|
210
209
|
if (tdew_pq->size == 0) {
|
211
|
-
self->
|
210
|
+
self->doc_num = -1;
|
212
211
|
return false;
|
213
212
|
}
|
214
213
|
while ((tdew = (TermDocEnumWrapper *)frt_pq_top(tdew_pq)) != NULL
|
215
|
-
&& (target_doc_num > tdew->
|
214
|
+
&& (target_doc_num > tdew->doc_num)) {
|
216
215
|
if (tdew_skip_to(tdew, target_doc_num)) {
|
217
216
|
frt_pq_down(tdew_pq);
|
218
217
|
} else {
|
@@ -232,11 +231,11 @@ static FrtExplanation *multi_tsc_explain(FrtScorer *self, int doc_num) {
|
|
232
231
|
TermDocEnumWrapper *tdew;
|
233
232
|
|
234
233
|
if (multi_tsc_advance_to(self, doc_num) &&
|
235
|
-
(tdew = (TermDocEnumWrapper *)frt_pq_top(mtsc->tdew_pq))->
|
234
|
+
(tdew = (TermDocEnumWrapper *)frt_pq_top(mtsc->tdew_pq))->doc_num == doc_num) {
|
236
235
|
|
237
236
|
FrtPriorityQueue *tdew_pq = MTSc(self)->tdew_pq;
|
238
237
|
FrtExplanation *expl = frt_expl_new(0.0f, "The sum of:");
|
239
|
-
int
|
238
|
+
int curr_doc_num = self->doc_num = tdew->doc_num;
|
240
239
|
float total_score = 0.0f;
|
241
240
|
|
242
241
|
do {
|
@@ -257,7 +256,7 @@ static FrtExplanation *multi_tsc_explain(FrtScorer *self, int doc_num) {
|
|
257
256
|
}
|
258
257
|
|
259
258
|
} while (((tdew = (TermDocEnumWrapper *)frt_pq_top(tdew_pq)) != NULL)
|
260
|
-
&& tdew->
|
259
|
+
&& tdew->doc_num == curr_doc_num);
|
261
260
|
expl->value = total_score;
|
262
261
|
return expl;
|
263
262
|
} else {
|
@@ -445,7 +444,7 @@ static FrtExplanation *multi_tw_explain(FrtWeight *self, FrtIndexReader *ir, int
|
|
445
444
|
static FrtWeight *multi_tw_new(FrtQuery *query, FrtSearcher *searcher) {
|
446
445
|
int i;
|
447
446
|
int doc_freq = 0;
|
448
|
-
FrtWeight *self
|
447
|
+
FrtWeight *self = w_new(FrtWeight, query);
|
449
448
|
FrtPriorityQueue *bt_pq = MTQ(query)->boosted_terms;
|
450
449
|
|
451
450
|
self->scorer = &multi_tw_scorer;
|
@@ -461,7 +460,7 @@ static FrtWeight *multi_tw_new(FrtQuery *query, FrtSearcher *searcher) {
|
|
461
460
|
((BoostedTerm *)bt_pq->heap[i])->term);
|
462
461
|
}
|
463
462
|
self->idf += frt_sim_idf(self->similarity, doc_freq,
|
464
|
-
searcher->
|
463
|
+
searcher->max_doc_num(searcher));
|
465
464
|
|
466
465
|
return self;
|
467
466
|
}
|