isomorfeus-ferret 0.17.2 → 0.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +118 -125
- data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
- data/ext/isomorfeus_ferret_ext/frb_search.c +31 -23
- 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 +2 -27
- 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 +13 -32
- 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_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 +20 -38
- data/ext/isomorfeus_ferret_ext/frt_index.c +292 -790
- data/ext/isomorfeus_ferret_ext/frt_index.h +1 -102
- 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 +85 -171
- data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -16
- data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
- data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +52 -104
- data/ext/isomorfeus_ferret_ext/frt_q_range.c +6 -12
- data/ext/isomorfeus_ferret_ext/frt_q_span.c +113 -226
- 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 +82 -164
- data/ext/isomorfeus_ferret_ext/frt_similarity.c +11 -22
- data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
- 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 +40 -87
- 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 +15 -23
- data/ext/isomorfeus_ferret_ext/test_filter.c +17 -27
- 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 +277 -487
- 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 +60 -109
- 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 +14 -24
- 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 +14 -20
- 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 +1 -1
- data/lib/isomorfeus/ferret/version.rb +1 -1
- metadata +24 -4
@@ -16,13 +16,11 @@
|
|
16
16
|
|
17
17
|
#define SpQ(query) ((FrtSpanQuery *)(query))
|
18
18
|
|
19
|
-
static unsigned long long spanq_hash(FrtQuery *self)
|
20
|
-
{
|
19
|
+
static unsigned long long spanq_hash(FrtQuery *self) {
|
21
20
|
return SpQ(self)->field ? frt_str_hash(rb_id2name(SpQ(self)->field)) : 0;
|
22
21
|
}
|
23
22
|
|
24
|
-
static int spanq_eq(FrtQuery *self, FrtQuery *o)
|
25
|
-
{
|
23
|
+
static int spanq_eq(FrtQuery *self, FrtQuery *o) {
|
26
24
|
return SpQ(self)->field == SpQ(o)->field;
|
27
25
|
}
|
28
26
|
|
@@ -31,8 +29,7 @@ static void spanq_destroy_i(FrtQuery *self) {
|
|
31
29
|
}
|
32
30
|
|
33
31
|
static FrtMatchVector *mv_to_term_mv(FrtMatchVector *term_mv, FrtMatchVector *full_mv,
|
34
|
-
FrtHashSet *terms, FrtTermVector *tv)
|
35
|
-
{
|
32
|
+
FrtHashSet *terms, FrtTermVector *tv) {
|
36
33
|
FrtHashSetEntry *hse;
|
37
34
|
for (hse = terms->first; hse; hse = hse->next) {
|
38
35
|
char *term = (char *)hse->elem;
|
@@ -63,8 +60,7 @@ static FrtMatchVector *mv_to_term_mv(FrtMatchVector *term_mv, FrtMatchVector *fu
|
|
63
60
|
|
64
61
|
#define TV_TDE(tde) ((TVTermDocEnum *)(tde))
|
65
62
|
|
66
|
-
typedef struct TVTermDocEnum
|
67
|
-
{
|
63
|
+
typedef struct TVTermDocEnum {
|
68
64
|
FrtTermDocEnum super;
|
69
65
|
int doc;
|
70
66
|
int index;
|
@@ -73,8 +69,7 @@ typedef struct TVTermDocEnum
|
|
73
69
|
FrtTermVector *tv;
|
74
70
|
} TVTermDocEnum;
|
75
71
|
|
76
|
-
static void tv_tde_seek(FrtTermDocEnum *tde, int field_num, const char *term)
|
77
|
-
{
|
72
|
+
static void tv_tde_seek(FrtTermDocEnum *tde, int field_num, const char *term) {
|
78
73
|
TVTermDocEnum *tv_tde = TV_TDE(tde);
|
79
74
|
FrtTVTerm *tv_term = frt_tv_get_tv_term(tv_tde->tv, term);
|
80
75
|
(void)field_num;
|
@@ -83,53 +78,44 @@ static void tv_tde_seek(FrtTermDocEnum *tde, int field_num, const char *term)
|
|
83
78
|
tv_tde->index = 0;
|
84
79
|
tv_tde->freq = tv_term->freq;
|
85
80
|
tv_tde->positions = tv_term->positions;
|
86
|
-
}
|
87
|
-
else {
|
81
|
+
} else {
|
88
82
|
tv_tde->doc = INT_MAX;
|
89
83
|
}
|
90
84
|
}
|
91
85
|
|
92
|
-
static bool tv_tde_next(FrtTermDocEnum *tde)
|
93
|
-
{
|
86
|
+
static bool tv_tde_next(FrtTermDocEnum *tde) {
|
94
87
|
if (TV_TDE(tde)->doc == -1) {
|
95
88
|
TV_TDE(tde)->doc = 0;
|
96
89
|
return true;
|
97
|
-
}
|
98
|
-
else {
|
90
|
+
} else {
|
99
91
|
TV_TDE(tde)->doc = INT_MAX;
|
100
92
|
return false;
|
101
93
|
}
|
102
94
|
}
|
103
95
|
|
104
|
-
static bool tv_tde_skip_to(FrtTermDocEnum *tde, int doc_num)
|
105
|
-
{
|
96
|
+
static bool tv_tde_skip_to(FrtTermDocEnum *tde, int doc_num) {
|
106
97
|
if (doc_num == 0) {
|
107
98
|
TV_TDE(tde)->doc = 0;
|
108
99
|
return true;
|
109
|
-
}
|
110
|
-
else {
|
100
|
+
} else {
|
111
101
|
TV_TDE(tde)->doc = INT_MAX;
|
112
102
|
return false;
|
113
103
|
}
|
114
104
|
}
|
115
105
|
|
116
|
-
static int tv_tde_next_position(FrtTermDocEnum *tde)
|
117
|
-
{
|
106
|
+
static int tv_tde_next_position(FrtTermDocEnum *tde) {
|
118
107
|
return TV_TDE(tde)->positions[TV_TDE(tde)->index++];
|
119
108
|
}
|
120
109
|
|
121
|
-
static int tv_tde_freq(FrtTermDocEnum *tde)
|
122
|
-
{
|
110
|
+
static int tv_tde_freq(FrtTermDocEnum *tde) {
|
123
111
|
return TV_TDE(tde)->freq;
|
124
112
|
}
|
125
113
|
|
126
|
-
static int tv_tde_doc_num(FrtTermDocEnum *tde)
|
127
|
-
{
|
114
|
+
static int tv_tde_doc_num(FrtTermDocEnum *tde) {
|
128
115
|
return TV_TDE(tde)->doc;
|
129
116
|
}
|
130
117
|
|
131
|
-
static FrtTermDocEnum *spanq_ir_term_positions(FrtIndexReader *ir)
|
132
|
-
{
|
118
|
+
static FrtTermDocEnum *spanq_ir_term_positions(FrtIndexReader *ir) {
|
133
119
|
TVTermDocEnum *tv_tde = FRT_ALLOC(TVTermDocEnum);
|
134
120
|
FrtTermDocEnum *tde = (FrtTermDocEnum *)tv_tde;
|
135
121
|
tv_tde->tv = (FrtTermVector *)ir->store;
|
@@ -180,8 +166,7 @@ static FrtMatchVector *spanq_get_matchv_i(FrtQuery *self, FrtMatchVector *mv, Fr
|
|
180
166
|
***************************************************************************/
|
181
167
|
|
182
168
|
#define SpSc(scorer) ((SpanScorer *)(scorer))
|
183
|
-
typedef struct SpanScorer
|
184
|
-
{
|
169
|
+
typedef struct SpanScorer {
|
185
170
|
FrtScorer super;
|
186
171
|
FrtIndexReader *ir;
|
187
172
|
FrtSpanEnum *spans;
|
@@ -194,8 +179,7 @@ typedef struct SpanScorer
|
|
194
179
|
bool more : 1;
|
195
180
|
} SpanScorer;
|
196
181
|
|
197
|
-
static float spansc_score(FrtScorer *self)
|
198
|
-
{
|
182
|
+
static float spansc_score(FrtScorer *self) {
|
199
183
|
SpanScorer *spansc = SpSc(self);
|
200
184
|
float raw = frt_sim_tf(spansc->sim, spansc->freq) * spansc->value;
|
201
185
|
|
@@ -203,8 +187,7 @@ static float spansc_score(FrtScorer *self)
|
|
203
187
|
return raw * frt_sim_decode_norm(self->similarity, spansc->norms[self->doc]);
|
204
188
|
}
|
205
189
|
|
206
|
-
static bool spansc_next(FrtScorer *self)
|
207
|
-
{
|
190
|
+
static bool spansc_next(FrtScorer *self) {
|
208
191
|
SpanScorer *spansc = SpSc(self);
|
209
192
|
FrtSpanEnum *se = spansc->spans;
|
210
193
|
int match_length;
|
@@ -230,8 +213,7 @@ static bool spansc_next(FrtScorer *self)
|
|
230
213
|
return (spansc->more || (spansc->freq != 0.0));
|
231
214
|
}
|
232
215
|
|
233
|
-
static bool spansc_skip_to(FrtScorer *self, int target)
|
234
|
-
{
|
216
|
+
static bool spansc_skip_to(FrtScorer *self, int target) {
|
235
217
|
SpanScorer *spansc = SpSc(self);
|
236
218
|
FrtSpanEnum *se = spansc->spans;
|
237
219
|
|
@@ -254,8 +236,7 @@ static bool spansc_skip_to(FrtScorer *self, int target)
|
|
254
236
|
return (spansc->more || (spansc->freq != 0.0));
|
255
237
|
}
|
256
238
|
|
257
|
-
static FrtExplanation *spansc_explain(FrtScorer *self, int target)
|
258
|
-
{
|
239
|
+
static FrtExplanation *spansc_explain(FrtScorer *self, int target) {
|
259
240
|
FrtExplanation *tf_explanation;
|
260
241
|
SpanScorer *spansc = SpSc(self);
|
261
242
|
float phrase_freq;
|
@@ -268,8 +249,7 @@ static FrtExplanation *spansc_explain(FrtScorer *self, int target)
|
|
268
249
|
return tf_explanation;
|
269
250
|
}
|
270
251
|
|
271
|
-
static void spansc_destroy(FrtScorer *self)
|
272
|
-
{
|
252
|
+
static void spansc_destroy(FrtScorer *self) {
|
273
253
|
SpanScorer *spansc = SpSc(self);
|
274
254
|
if (spansc->spans) {
|
275
255
|
spansc->spans->destroy(spansc->spans);
|
@@ -277,8 +257,7 @@ static void spansc_destroy(FrtScorer *self)
|
|
277
257
|
frt_scorer_destroy_i(self);
|
278
258
|
}
|
279
259
|
|
280
|
-
static FrtScorer *spansc_new(FrtWeight *weight, FrtIndexReader *ir)
|
281
|
-
{
|
260
|
+
static FrtScorer *spansc_new(FrtWeight *weight, FrtIndexReader *ir) {
|
282
261
|
FrtScorer *self = NULL;
|
283
262
|
const int field_num = frt_fis_get_field_num(ir->fis, SpQ(weight->query)->field);
|
284
263
|
if (field_num >= 0) {
|
@@ -310,8 +289,7 @@ static FrtScorer *spansc_new(FrtWeight *weight, FrtIndexReader *ir)
|
|
310
289
|
#define SpTEn(span_enum) ((SpanTermEnum *)(span_enum))
|
311
290
|
#define SpTQ(query) ((FrtSpanTermQuery *)(query))
|
312
291
|
|
313
|
-
typedef struct SpanTermEnum
|
314
|
-
{
|
292
|
+
typedef struct SpanTermEnum {
|
315
293
|
FrtSpanEnum super;
|
316
294
|
FrtTermDocEnum *positions;
|
317
295
|
int position;
|
@@ -321,8 +299,7 @@ typedef struct SpanTermEnum
|
|
321
299
|
} SpanTermEnum;
|
322
300
|
|
323
301
|
|
324
|
-
static bool spante_next(FrtSpanEnum *self)
|
325
|
-
{
|
302
|
+
static bool spante_next(FrtSpanEnum *self) {
|
326
303
|
SpanTermEnum *ste = SpTEn(self);
|
327
304
|
FrtTermDocEnum *tde = ste->positions;
|
328
305
|
|
@@ -340,8 +317,7 @@ static bool spante_next(FrtSpanEnum *self)
|
|
340
317
|
return true;
|
341
318
|
}
|
342
319
|
|
343
|
-
static bool spante_skip_to(FrtSpanEnum *self, int target)
|
344
|
-
{
|
320
|
+
static bool spante_skip_to(FrtSpanEnum *self, int target) {
|
345
321
|
SpanTermEnum *ste = SpTEn(self);
|
346
322
|
FrtTermDocEnum *tde = ste->positions;
|
347
323
|
|
@@ -367,18 +343,15 @@ static bool spante_skip_to(FrtSpanEnum *self, int target)
|
|
367
343
|
return true;
|
368
344
|
}
|
369
345
|
|
370
|
-
static int spante_doc(FrtSpanEnum *self)
|
371
|
-
{
|
346
|
+
static int spante_doc(FrtSpanEnum *self) {
|
372
347
|
return SpTEn(self)->doc;
|
373
348
|
}
|
374
349
|
|
375
|
-
static int spante_start(FrtSpanEnum *self)
|
376
|
-
{
|
350
|
+
static int spante_start(FrtSpanEnum *self) {
|
377
351
|
return SpTEn(self)->position;
|
378
352
|
}
|
379
353
|
|
380
|
-
static int spante_end(FrtSpanEnum *self)
|
381
|
-
{
|
354
|
+
static int spante_end(FrtSpanEnum *self) {
|
382
355
|
return SpTEn(self)->position + 1;
|
383
356
|
}
|
384
357
|
|
@@ -391,12 +364,10 @@ static char *spante_to_s(FrtSpanEnum *self) {
|
|
391
364
|
|
392
365
|
if (self->doc(self) < 0) {
|
393
366
|
sprintf(pos_str, "START");
|
394
|
-
}
|
395
|
-
else {
|
367
|
+
} else {
|
396
368
|
if (self->doc(self) == INT_MAX) {
|
397
369
|
sprintf(pos_str, "END");
|
398
|
-
}
|
399
|
-
else {
|
370
|
+
} else {
|
400
371
|
pos = SpTEn(self)->position;
|
401
372
|
sprintf(pos_str, "%d", self->doc(self) - pos);
|
402
373
|
}
|
@@ -406,15 +377,13 @@ static char *spante_to_s(FrtSpanEnum *self) {
|
|
406
377
|
return str;
|
407
378
|
}
|
408
379
|
|
409
|
-
static void spante_destroy(FrtSpanEnum *self)
|
410
|
-
{
|
380
|
+
static void spante_destroy(FrtSpanEnum *self) {
|
411
381
|
FrtTermDocEnum *tde = SpTEn(self)->positions;
|
412
382
|
tde->close(tde);
|
413
383
|
free(self);
|
414
384
|
}
|
415
385
|
|
416
|
-
static FrtSpanEnum *spante_new(FrtQuery *query, FrtIndexReader *ir)
|
417
|
-
{
|
386
|
+
static FrtSpanEnum *spante_new(FrtQuery *query, FrtIndexReader *ir) {
|
418
387
|
char *term = SpTQ(query)->term;
|
419
388
|
FrtSpanEnum *self = (FrtSpanEnum *)FRT_ALLOC(SpanTermEnum);
|
420
389
|
|
@@ -444,8 +413,7 @@ static FrtSpanEnum *spante_new(FrtQuery *query, FrtIndexReader *ir)
|
|
444
413
|
/* * TermPosEnumWrapper * */
|
445
414
|
#define TPE_READ_SIZE 16
|
446
415
|
|
447
|
-
typedef struct TermPosEnumWrapper
|
448
|
-
{
|
416
|
+
typedef struct TermPosEnumWrapper {
|
449
417
|
const char *term;
|
450
418
|
FrtTermDocEnum *tpe;
|
451
419
|
int doc;
|
@@ -453,14 +421,12 @@ typedef struct TermPosEnumWrapper
|
|
453
421
|
} TermPosEnumWrapper;
|
454
422
|
|
455
423
|
static bool tpew_less_than(const TermPosEnumWrapper *tpew1,
|
456
|
-
const TermPosEnumWrapper *tpew2)
|
457
|
-
{
|
424
|
+
const TermPosEnumWrapper *tpew2) {
|
458
425
|
return (tpew1->doc < tpew2->doc)
|
459
426
|
|| (tpew1->doc == tpew2->doc && tpew1->pos < tpew2->pos);
|
460
427
|
}
|
461
428
|
|
462
|
-
static bool tpew_next(TermPosEnumWrapper *self)
|
463
|
-
{
|
429
|
+
static bool tpew_next(TermPosEnumWrapper *self) {
|
464
430
|
FrtTermDocEnum *tpe = self->tpe;
|
465
431
|
if (0 > (self->pos = tpe->next_position(tpe))) {
|
466
432
|
if (!tpe->next(tpe)) return false;
|
@@ -470,28 +436,24 @@ static bool tpew_next(TermPosEnumWrapper *self)
|
|
470
436
|
return true;
|
471
437
|
}
|
472
438
|
|
473
|
-
static bool tpew_skip_to(TermPosEnumWrapper *self, int doc_num)
|
474
|
-
{
|
439
|
+
static bool tpew_skip_to(TermPosEnumWrapper *self, int doc_num) {
|
475
440
|
FrtTermDocEnum *tpe = self->tpe;
|
476
441
|
|
477
442
|
if (tpe->skip_to(tpe, doc_num)) {
|
478
443
|
self->doc = tpe->doc_num(tpe);
|
479
444
|
self->pos = tpe->next_position(tpe);
|
480
445
|
return true;
|
481
|
-
}
|
482
|
-
else {
|
446
|
+
} else {
|
483
447
|
return false;
|
484
448
|
}
|
485
449
|
}
|
486
450
|
|
487
|
-
static void tpew_destroy(TermPosEnumWrapper *self)
|
488
|
-
{
|
451
|
+
static void tpew_destroy(TermPosEnumWrapper *self) {
|
489
452
|
self->tpe->close(self->tpe);
|
490
453
|
free(self);
|
491
454
|
}
|
492
455
|
|
493
|
-
static TermPosEnumWrapper *tpew_new(const char *term, FrtTermDocEnum *tpe)
|
494
|
-
{
|
456
|
+
static TermPosEnumWrapper *tpew_new(const char *term, FrtTermDocEnum *tpe) {
|
495
457
|
TermPosEnumWrapper *self = FRT_ALLOC_AND_ZERO(TermPosEnumWrapper);
|
496
458
|
self->term = term;
|
497
459
|
self->tpe = tpe;
|
@@ -502,8 +464,7 @@ static TermPosEnumWrapper *tpew_new(const char *term, FrtTermDocEnum *tpe)
|
|
502
464
|
#define SpMTEn(span_enum) ((SpanMultiTermEnum *)(span_enum))
|
503
465
|
#define SpMTQ(query) ((FrtSpanMultiTermQuery *)(query))
|
504
466
|
|
505
|
-
typedef struct SpanMultiTermEnum
|
506
|
-
{
|
467
|
+
typedef struct SpanMultiTermEnum {
|
507
468
|
FrtSpanEnum super;
|
508
469
|
FrtPriorityQueue *tpew_pq;
|
509
470
|
TermPosEnumWrapper **tpews;
|
@@ -512,8 +473,7 @@ typedef struct SpanMultiTermEnum
|
|
512
473
|
int doc;
|
513
474
|
} SpanMultiTermEnum;
|
514
475
|
|
515
|
-
static bool spanmte_next(FrtSpanEnum *self)
|
516
|
-
{
|
476
|
+
static bool spanmte_next(FrtSpanEnum *self) {
|
517
477
|
int curr_doc, curr_pos;
|
518
478
|
TermPosEnumWrapper *tpew;
|
519
479
|
SpanMultiTermEnum *mte = SpMTEn(self);
|
@@ -541,8 +501,7 @@ static bool spanmte_next(FrtSpanEnum *self)
|
|
541
501
|
do {
|
542
502
|
if (tpew_next(tpew)) {
|
543
503
|
frt_pq_down(tpew_pq);
|
544
|
-
}
|
545
|
-
else {
|
504
|
+
} else {
|
546
505
|
frt_pq_pop(tpew_pq);
|
547
506
|
}
|
548
507
|
} while (((tpew = (TermPosEnumWrapper *)frt_pq_top(tpew_pq)) != NULL)
|
@@ -550,8 +509,7 @@ static bool spanmte_next(FrtSpanEnum *self)
|
|
550
509
|
return true;
|
551
510
|
}
|
552
511
|
|
553
|
-
static bool spanmte_skip_to(FrtSpanEnum *self, int target)
|
554
|
-
{
|
512
|
+
static bool spanmte_skip_to(FrtSpanEnum *self, int target) {
|
555
513
|
SpanMultiTermEnum *mte = SpMTEn(self);
|
556
514
|
FrtPriorityQueue *tpew_pq = mte->tpew_pq;
|
557
515
|
TermPosEnumWrapper *tpew;
|
@@ -573,31 +531,26 @@ static bool spanmte_skip_to(FrtSpanEnum *self, int target)
|
|
573
531
|
&& (target > tpew->doc)) {
|
574
532
|
if (tpew_skip_to(tpew, target)) {
|
575
533
|
frt_pq_down(tpew_pq);
|
576
|
-
}
|
577
|
-
else {
|
534
|
+
} else {
|
578
535
|
frt_pq_pop(tpew_pq);
|
579
536
|
}
|
580
537
|
}
|
581
538
|
return spanmte_next(self);
|
582
539
|
}
|
583
540
|
|
584
|
-
static int spanmte_doc(FrtSpanEnum *self)
|
585
|
-
{
|
541
|
+
static int spanmte_doc(FrtSpanEnum *self) {
|
586
542
|
return SpMTEn(self)->doc;
|
587
543
|
}
|
588
544
|
|
589
|
-
static int spanmte_start(FrtSpanEnum *self)
|
590
|
-
{
|
545
|
+
static int spanmte_start(FrtSpanEnum *self) {
|
591
546
|
return SpMTEn(self)->pos;
|
592
547
|
}
|
593
548
|
|
594
|
-
static int spanmte_end(FrtSpanEnum *self)
|
595
|
-
{
|
549
|
+
static int spanmte_end(FrtSpanEnum *self) {
|
596
550
|
return SpMTEn(self)->pos + 1;
|
597
551
|
}
|
598
552
|
|
599
|
-
static void spanmte_destroy(FrtSpanEnum *self)
|
600
|
-
{
|
553
|
+
static void spanmte_destroy(FrtSpanEnum *self) {
|
601
554
|
SpanMultiTermEnum *mte = SpMTEn(self);
|
602
555
|
int i;
|
603
556
|
if (mte->tpew_pq) frt_pq_destroy(mte->tpew_pq);
|
@@ -608,8 +561,7 @@ static void spanmte_destroy(FrtSpanEnum *self)
|
|
608
561
|
free(self);
|
609
562
|
}
|
610
563
|
|
611
|
-
static FrtSpanEnum *spanmte_new(FrtQuery *query, FrtIndexReader *ir)
|
612
|
-
{
|
564
|
+
static FrtSpanEnum *spanmte_new(FrtQuery *query, FrtIndexReader *ir) {
|
613
565
|
FrtSpanEnum *self = (FrtSpanEnum *)FRT_ALLOC(SpanMultiTermEnum);
|
614
566
|
SpanMultiTermEnum *smte = SpMTEn(self);
|
615
567
|
FrtSpanMultiTermQuery *smtq = SpMTQ(query);
|
@@ -647,15 +599,13 @@ static FrtSpanEnum *spanmte_new(FrtQuery *query, FrtIndexReader *ir)
|
|
647
599
|
#define SpFEn(span_enum) ((SpanFirstEnum *)(span_enum))
|
648
600
|
#define SpFQ(query) ((FrtSpanFirstQuery *)(query))
|
649
601
|
|
650
|
-
typedef struct SpanFirstEnum
|
651
|
-
{
|
602
|
+
typedef struct SpanFirstEnum {
|
652
603
|
FrtSpanEnum super;
|
653
604
|
FrtSpanEnum *sub_enum;
|
654
605
|
} SpanFirstEnum;
|
655
606
|
|
656
607
|
|
657
|
-
static bool spanfe_next(FrtSpanEnum *self)
|
658
|
-
{
|
608
|
+
static bool spanfe_next(FrtSpanEnum *self) {
|
659
609
|
FrtSpanEnum *sub_enum = SpFEn(self)->sub_enum;
|
660
610
|
int end = SpFQ(self->query)->end;
|
661
611
|
while (sub_enum->next(sub_enum)) { /* scan to next match */
|
@@ -666,8 +616,7 @@ static bool spanfe_next(FrtSpanEnum *self)
|
|
666
616
|
return false;
|
667
617
|
}
|
668
618
|
|
669
|
-
static bool spanfe_skip_to(FrtSpanEnum *self, int target)
|
670
|
-
{
|
619
|
+
static bool spanfe_skip_to(FrtSpanEnum *self, int target) {
|
671
620
|
FrtSpanEnum *sub_enum = SpFEn(self)->sub_enum;
|
672
621
|
int end = SpFQ(self->query)->end;
|
673
622
|
|
@@ -682,20 +631,17 @@ static bool spanfe_skip_to(FrtSpanEnum *self, int target)
|
|
682
631
|
return spanfe_next(self); /* scan to next match */
|
683
632
|
}
|
684
633
|
|
685
|
-
static int spanfe_doc(FrtSpanEnum *self)
|
686
|
-
{
|
634
|
+
static int spanfe_doc(FrtSpanEnum *self) {
|
687
635
|
FrtSpanEnum *sub_enum = SpFEn(self)->sub_enum;
|
688
636
|
return sub_enum->doc(sub_enum);
|
689
637
|
}
|
690
638
|
|
691
|
-
static int spanfe_start(FrtSpanEnum *self)
|
692
|
-
{
|
639
|
+
static int spanfe_start(FrtSpanEnum *self) {
|
693
640
|
FrtSpanEnum *sub_enum = SpFEn(self)->sub_enum;
|
694
641
|
return sub_enum->start(sub_enum);
|
695
642
|
}
|
696
643
|
|
697
|
-
static int spanfe_end(FrtSpanEnum *self)
|
698
|
-
{
|
644
|
+
static int spanfe_end(FrtSpanEnum *self) {
|
699
645
|
FrtSpanEnum *sub_enum = SpFEn(self)->sub_enum;
|
700
646
|
return sub_enum->end(sub_enum);
|
701
647
|
}
|
@@ -707,15 +653,13 @@ static char *spanfe_to_s(FrtSpanEnum *self) {
|
|
707
653
|
return res;
|
708
654
|
}
|
709
655
|
|
710
|
-
static void spanfe_destroy(FrtSpanEnum *self)
|
711
|
-
{
|
656
|
+
static void spanfe_destroy(FrtSpanEnum *self) {
|
712
657
|
FrtSpanEnum *sub_enum = SpFEn(self)->sub_enum;
|
713
658
|
sub_enum->destroy(sub_enum);
|
714
659
|
free(self);
|
715
660
|
}
|
716
661
|
|
717
|
-
static FrtSpanEnum *spanfe_new(FrtQuery *query, FrtIndexReader *ir)
|
718
|
-
{
|
662
|
+
static FrtSpanEnum *spanfe_new(FrtQuery *query, FrtIndexReader *ir) {
|
719
663
|
FrtSpanEnum *self = (FrtSpanEnum *)FRT_ALLOC(SpanFirstEnum);
|
720
664
|
FrtSpanFirstQuery *sfq = SpFQ(query);
|
721
665
|
|
@@ -741,8 +685,7 @@ static FrtSpanEnum *spanfe_new(FrtQuery *query, FrtIndexReader *ir)
|
|
741
685
|
#define SpOEn(span_enum) ((SpanOrEnum *)(span_enum))
|
742
686
|
#define SpOQ(query) ((FrtSpanOrQuery *)(query))
|
743
687
|
|
744
|
-
typedef struct SpanOrEnum
|
745
|
-
{
|
688
|
+
typedef struct SpanOrEnum {
|
746
689
|
FrtSpanEnum super;
|
747
690
|
FrtPriorityQueue *queue;
|
748
691
|
FrtSpanEnum **span_enums;
|
@@ -751,26 +694,22 @@ typedef struct SpanOrEnum
|
|
751
694
|
} SpanOrEnum;
|
752
695
|
|
753
696
|
|
754
|
-
static bool span_less_than(FrtSpanEnum *s1, FrtSpanEnum *s2)
|
755
|
-
{
|
697
|
+
static bool span_less_than(FrtSpanEnum *s1, FrtSpanEnum *s2) {
|
756
698
|
int doc_diff, start_diff;
|
757
699
|
doc_diff = s1->doc(s1) - s2->doc(s2);
|
758
700
|
if (doc_diff == 0) {
|
759
701
|
start_diff = s1->start(s1) - s2->start(s2);
|
760
702
|
if (start_diff == 0) {
|
761
703
|
return s1->end(s1) < s2->end(s2);
|
762
|
-
}
|
763
|
-
else {
|
704
|
+
} else {
|
764
705
|
return start_diff < 0;
|
765
706
|
}
|
766
|
-
}
|
767
|
-
else {
|
707
|
+
} else {
|
768
708
|
return doc_diff < 0;
|
769
709
|
}
|
770
710
|
}
|
771
711
|
|
772
|
-
static bool spanoe_next(FrtSpanEnum *self)
|
773
|
-
{
|
712
|
+
static bool spanoe_next(FrtSpanEnum *self) {
|
774
713
|
SpanOrEnum *soe = SpOEn(self);
|
775
714
|
FrtSpanEnum *se;
|
776
715
|
int i;
|
@@ -801,8 +740,7 @@ static bool spanoe_next(FrtSpanEnum *self)
|
|
801
740
|
return soe->queue->size != 0;
|
802
741
|
}
|
803
742
|
|
804
|
-
static bool spanoe_skip_to(FrtSpanEnum *self, int target)
|
805
|
-
{
|
743
|
+
static bool spanoe_skip_to(FrtSpanEnum *self, int target) {
|
806
744
|
SpanOrEnum *soe = SpOEn(self);
|
807
745
|
FrtSpanEnum *se;
|
808
746
|
int i;
|
@@ -815,15 +753,13 @@ static bool spanoe_skip_to(FrtSpanEnum *self, int target)
|
|
815
753
|
}
|
816
754
|
}
|
817
755
|
soe->first_time = false;
|
818
|
-
}
|
819
|
-
else {
|
756
|
+
} else {
|
820
757
|
while ((soe->queue->size != 0) &&
|
821
758
|
((se = (FrtSpanEnum *)frt_pq_top(soe->queue)) != NULL) &&
|
822
759
|
(se->doc(se) < target)) {
|
823
760
|
if (se->skip_to(se, target)) {
|
824
761
|
frt_pq_down(soe->queue);
|
825
|
-
}
|
826
|
-
else {
|
762
|
+
} else {
|
827
763
|
frt_pq_pop(soe->queue);
|
828
764
|
}
|
829
765
|
}
|
@@ -834,20 +770,17 @@ static bool spanoe_skip_to(FrtSpanEnum *self, int target)
|
|
834
770
|
|
835
771
|
#define SpOEn_Top_SE(self) (FrtSpanEnum *)frt_pq_top(SpOEn(self)->queue)
|
836
772
|
|
837
|
-
static int spanoe_doc(FrtSpanEnum *self)
|
838
|
-
{
|
773
|
+
static int spanoe_doc(FrtSpanEnum *self) {
|
839
774
|
FrtSpanEnum *se = SpOEn_Top_SE(self);
|
840
775
|
return se->doc(se);
|
841
776
|
}
|
842
777
|
|
843
|
-
static int spanoe_start(FrtSpanEnum *self)
|
844
|
-
{
|
778
|
+
static int spanoe_start(FrtSpanEnum *self) {
|
845
779
|
FrtSpanEnum *se = SpOEn_Top_SE(self);
|
846
780
|
return se->start(se);
|
847
781
|
}
|
848
782
|
|
849
|
-
static int spanoe_end(FrtSpanEnum *self)
|
850
|
-
{
|
783
|
+
static int spanoe_end(FrtSpanEnum *self) {
|
851
784
|
FrtSpanEnum *se = SpOEn_Top_SE(self);
|
852
785
|
return se->end(se);
|
853
786
|
}
|
@@ -861,12 +794,10 @@ static char *spanoe_to_s(FrtSpanEnum *self) {
|
|
861
794
|
|
862
795
|
if (soe->first_time) {
|
863
796
|
sprintf(doc_str, "START");
|
864
|
-
}
|
865
|
-
else {
|
797
|
+
} else {
|
866
798
|
if (soe->queue->size == 0) {
|
867
799
|
sprintf(doc_str, "END");
|
868
|
-
}
|
869
|
-
else {
|
800
|
+
} else {
|
870
801
|
sprintf(doc_str, "%d:%d-%d", self->doc(self),
|
871
802
|
self->start(self), self->end(self));
|
872
803
|
}
|
@@ -876,8 +807,7 @@ static char *spanoe_to_s(FrtSpanEnum *self) {
|
|
876
807
|
return str;
|
877
808
|
}
|
878
809
|
|
879
|
-
static void spanoe_destroy(FrtSpanEnum *self)
|
880
|
-
{
|
810
|
+
static void spanoe_destroy(FrtSpanEnum *self) {
|
881
811
|
FrtSpanEnum *se;
|
882
812
|
SpanOrEnum *soe = SpOEn(self);
|
883
813
|
int i;
|
@@ -890,8 +820,7 @@ static void spanoe_destroy(FrtSpanEnum *self)
|
|
890
820
|
free(self);
|
891
821
|
}
|
892
822
|
|
893
|
-
static FrtSpanEnum *spanoe_new(FrtQuery *query, FrtIndexReader *ir)
|
894
|
-
{
|
823
|
+
static FrtSpanEnum *spanoe_new(FrtQuery *query, FrtIndexReader *ir) {
|
895
824
|
FrtQuery *clause;
|
896
825
|
FrtSpanEnum *self = (FrtSpanEnum *)FRT_ALLOC(SpanOrEnum);
|
897
826
|
FrtSpanOrQuery *soq = SpOQ(query);
|
@@ -928,8 +857,7 @@ static FrtSpanEnum *spanoe_new(FrtQuery *query, FrtIndexReader *ir)
|
|
928
857
|
#define SpNEn(span_enum) ((SpanNearEnum *)(span_enum))
|
929
858
|
#define SpNQ(query) ((FrtSpanNearQuery *)(query))
|
930
859
|
|
931
|
-
typedef struct SpanNearEnum
|
932
|
-
{
|
860
|
+
typedef struct SpanNearEnum {
|
933
861
|
FrtSpanEnum super;
|
934
862
|
FrtSpanEnum **span_enums;
|
935
863
|
int s_cnt;
|
@@ -948,8 +876,7 @@ typedef struct SpanNearEnum
|
|
948
876
|
se = sne->span_enums[sne->current];\
|
949
877
|
} while (0);
|
950
878
|
|
951
|
-
static bool sne_init(SpanNearEnum *sne)
|
952
|
-
{
|
879
|
+
static bool sne_init(SpanNearEnum *sne) {
|
953
880
|
FrtSpanEnum *se = sne->span_enums[sne->current];
|
954
881
|
int prev_doc = se->doc(se);
|
955
882
|
int i;
|
@@ -964,8 +891,7 @@ static bool sne_init(SpanNearEnum *sne)
|
|
964
891
|
return true;
|
965
892
|
}
|
966
893
|
|
967
|
-
static bool sne_goto_next_doc(SpanNearEnum *sne)
|
968
|
-
{
|
894
|
+
static bool sne_goto_next_doc(SpanNearEnum *sne) {
|
969
895
|
FrtSpanEnum *se = sne->span_enums[sne->current];
|
970
896
|
int prev_doc = se->doc(se);
|
971
897
|
|
@@ -981,8 +907,7 @@ static bool sne_goto_next_doc(SpanNearEnum *sne)
|
|
981
907
|
return true;
|
982
908
|
}
|
983
909
|
|
984
|
-
static bool sne_next_unordered_match(FrtSpanEnum *self)
|
985
|
-
{
|
910
|
+
static bool sne_next_unordered_match(FrtSpanEnum *self) {
|
986
911
|
SpanNearEnum *sne = SpNEn(self);
|
987
912
|
FrtSpanEnum *se, *min_se = NULL;
|
988
913
|
int i;
|
@@ -1026,8 +951,7 @@ static bool sne_next_unordered_match(FrtSpanEnum *self)
|
|
1026
951
|
}
|
1027
952
|
}
|
1028
953
|
|
1029
|
-
static bool sne_next_ordered_match(FrtSpanEnum *self)
|
1030
|
-
{
|
954
|
+
static bool sne_next_ordered_match(FrtSpanEnum *self) {
|
1031
955
|
SpanNearEnum *sne = SpNEn(self);
|
1032
956
|
FrtSpanEnum *se;
|
1033
957
|
int i;
|
@@ -1083,8 +1007,7 @@ static bool sne_next_ordered_match(FrtSpanEnum *self)
|
|
1083
1007
|
sne->current = 0;
|
1084
1008
|
return true;
|
1085
1009
|
|
1086
|
-
}
|
1087
|
-
else {
|
1010
|
+
} else {
|
1088
1011
|
se = sne->span_enums[0];
|
1089
1012
|
if (!se->next(se)) {
|
1090
1013
|
return false;
|
@@ -1100,8 +1023,7 @@ static bool sne_next_ordered_match(FrtSpanEnum *self)
|
|
1100
1023
|
}
|
1101
1024
|
}
|
1102
1025
|
|
1103
|
-
static bool sne_next_match(FrtSpanEnum *self)
|
1104
|
-
{
|
1026
|
+
static bool sne_next_match(FrtSpanEnum *self) {
|
1105
1027
|
SpanNearEnum *sne = SpNEn(self);
|
1106
1028
|
FrtSpanEnum *se_curr, *se_next;
|
1107
1029
|
|
@@ -1121,14 +1043,12 @@ static bool sne_next_match(FrtSpanEnum *self)
|
|
1121
1043
|
|
1122
1044
|
if (sne->in_order) {
|
1123
1045
|
return sne_next_ordered_match(self);
|
1124
|
-
}
|
1125
|
-
else {
|
1046
|
+
} else {
|
1126
1047
|
return sne_next_unordered_match(self);
|
1127
1048
|
}
|
1128
1049
|
}
|
1129
1050
|
|
1130
|
-
static bool spanne_next(FrtSpanEnum *self)
|
1131
|
-
{
|
1051
|
+
static bool spanne_next(FrtSpanEnum *self) {
|
1132
1052
|
SpanNearEnum *sne = SpNEn(self);
|
1133
1053
|
FrtSpanEnum *se;
|
1134
1054
|
|
@@ -1138,8 +1058,7 @@ static bool spanne_next(FrtSpanEnum *self)
|
|
1138
1058
|
return sne_next_match(self);
|
1139
1059
|
}
|
1140
1060
|
|
1141
|
-
static bool spanne_skip_to(FrtSpanEnum *self, int target)
|
1142
|
-
{
|
1061
|
+
static bool spanne_skip_to(FrtSpanEnum *self, int target) {
|
1143
1062
|
FrtSpanEnum *se = SpNEn(self)->span_enums[SpNEn(self)->current];
|
1144
1063
|
if (!se->skip_to(se, target)) {
|
1145
1064
|
return false;
|
@@ -1148,18 +1067,15 @@ static bool spanne_skip_to(FrtSpanEnum *self, int target)
|
|
1148
1067
|
return sne_next_match(self);
|
1149
1068
|
}
|
1150
1069
|
|
1151
|
-
static int spanne_doc(FrtSpanEnum *self)
|
1152
|
-
{
|
1070
|
+
static int spanne_doc(FrtSpanEnum *self) {
|
1153
1071
|
return SpNEn(self)->doc;
|
1154
1072
|
}
|
1155
1073
|
|
1156
|
-
static int spanne_start(FrtSpanEnum *self)
|
1157
|
-
{
|
1074
|
+
static int spanne_start(FrtSpanEnum *self) {
|
1158
1075
|
return SpNEn(self)->start;
|
1159
1076
|
}
|
1160
1077
|
|
1161
|
-
static int spanne_end(FrtSpanEnum *self)
|
1162
|
-
{
|
1078
|
+
static int spanne_end(FrtSpanEnum *self) {
|
1163
1079
|
return SpNEn(self)->end;
|
1164
1080
|
}
|
1165
1081
|
|
@@ -1172,8 +1088,7 @@ static char *spanne_to_s(FrtSpanEnum *self) {
|
|
1172
1088
|
|
1173
1089
|
if (sne->first_time) {
|
1174
1090
|
sprintf(doc_str, "START");
|
1175
|
-
}
|
1176
|
-
else {
|
1091
|
+
} else {
|
1177
1092
|
sprintf(doc_str, "%d:%d-%d", self->doc(self),
|
1178
1093
|
self->start(self), self->end(self));
|
1179
1094
|
}
|
@@ -1182,8 +1097,7 @@ static char *spanne_to_s(FrtSpanEnum *self) {
|
|
1182
1097
|
return str;
|
1183
1098
|
}
|
1184
1099
|
|
1185
|
-
static void spanne_destroy(FrtSpanEnum *self)
|
1186
|
-
{
|
1100
|
+
static void spanne_destroy(FrtSpanEnum *self) {
|
1187
1101
|
FrtSpanEnum *se;
|
1188
1102
|
SpanNearEnum *sne = SpNEn(self);
|
1189
1103
|
int i;
|
@@ -1195,8 +1109,7 @@ static void spanne_destroy(FrtSpanEnum *self)
|
|
1195
1109
|
free(self);
|
1196
1110
|
}
|
1197
1111
|
|
1198
|
-
static FrtSpanEnum *spanne_new(FrtQuery *query, FrtIndexReader *ir)
|
1199
|
-
{
|
1112
|
+
static FrtSpanEnum *spanne_new(FrtQuery *query, FrtIndexReader *ir) {
|
1200
1113
|
int i;
|
1201
1114
|
FrtQuery *clause;
|
1202
1115
|
FrtSpanEnum *self = (FrtSpanEnum *)FRT_ALLOC(SpanNearEnum);
|
@@ -1239,8 +1152,7 @@ static FrtSpanEnum *spanne_new(FrtQuery *query, FrtIndexReader *ir)
|
|
1239
1152
|
#define SpXEn(span_enum) ((SpanNotEnum *)(span_enum))
|
1240
1153
|
#define SpXQ(query) ((FrtSpanNotQuery *)(query))
|
1241
1154
|
|
1242
|
-
typedef struct SpanNotEnum
|
1243
|
-
{
|
1155
|
+
typedef struct SpanNotEnum {
|
1244
1156
|
FrtSpanEnum super;
|
1245
1157
|
FrtSpanEnum *inc;
|
1246
1158
|
FrtSpanEnum *exc;
|
@@ -1249,8 +1161,7 @@ typedef struct SpanNotEnum
|
|
1249
1161
|
} SpanNotEnum;
|
1250
1162
|
|
1251
1163
|
|
1252
|
-
static bool spanxe_next(FrtSpanEnum *self)
|
1253
|
-
{
|
1164
|
+
static bool spanxe_next(FrtSpanEnum *self) {
|
1254
1165
|
SpanNotEnum *sxe = SpXEn(self);
|
1255
1166
|
FrtSpanEnum *inc = sxe->inc, *exc = sxe->exc;
|
1256
1167
|
if (sxe->more_inc) { /* move to next incl */
|
@@ -1279,8 +1190,7 @@ static bool spanxe_next(FrtSpanEnum *self)
|
|
1279
1190
|
return sxe->more_inc;
|
1280
1191
|
}
|
1281
1192
|
|
1282
|
-
static bool spanxe_skip_to(FrtSpanEnum *self, int target)
|
1283
|
-
{
|
1193
|
+
static bool spanxe_skip_to(FrtSpanEnum *self, int target) {
|
1284
1194
|
SpanNotEnum *sxe = SpXEn(self);
|
1285
1195
|
FrtSpanEnum *inc = sxe->inc, *exc = sxe->exc;
|
1286
1196
|
int doc;
|
@@ -1308,20 +1218,17 @@ static bool spanxe_skip_to(FrtSpanEnum *self, int target)
|
|
1308
1218
|
return spanxe_next(self); /* scan to next match */
|
1309
1219
|
}
|
1310
1220
|
|
1311
|
-
static int spanxe_doc(FrtSpanEnum *self)
|
1312
|
-
{
|
1221
|
+
static int spanxe_doc(FrtSpanEnum *self) {
|
1313
1222
|
FrtSpanEnum *inc = SpXEn(self)->inc;
|
1314
1223
|
return inc->doc(inc);
|
1315
1224
|
}
|
1316
1225
|
|
1317
|
-
static int spanxe_start(FrtSpanEnum *self)
|
1318
|
-
{
|
1226
|
+
static int spanxe_start(FrtSpanEnum *self) {
|
1319
1227
|
FrtSpanEnum *inc = SpXEn(self)->inc;
|
1320
1228
|
return inc->start(inc);
|
1321
1229
|
}
|
1322
1230
|
|
1323
|
-
static int spanxe_end(FrtSpanEnum *self)
|
1324
|
-
{
|
1231
|
+
static int spanxe_end(FrtSpanEnum *self) {
|
1325
1232
|
FrtSpanEnum *inc = SpXEn(self)->inc;
|
1326
1233
|
return inc->end(inc);
|
1327
1234
|
}
|
@@ -1333,16 +1240,14 @@ static char *spanxe_to_s(FrtSpanEnum *self) {
|
|
1333
1240
|
return res;
|
1334
1241
|
}
|
1335
1242
|
|
1336
|
-
static void spanxe_destroy(FrtSpanEnum *self)
|
1337
|
-
{
|
1243
|
+
static void spanxe_destroy(FrtSpanEnum *self) {
|
1338
1244
|
SpanNotEnum *sxe = SpXEn(self);
|
1339
1245
|
sxe->inc->destroy(sxe->inc);
|
1340
1246
|
sxe->exc->destroy(sxe->exc);
|
1341
1247
|
free(self);
|
1342
1248
|
}
|
1343
1249
|
|
1344
|
-
static FrtSpanEnum *spanxe_new(FrtQuery *query, FrtIndexReader *ir)
|
1345
|
-
{
|
1250
|
+
static FrtSpanEnum *spanxe_new(FrtQuery *query, FrtIndexReader *ir) {
|
1346
1251
|
FrtSpanEnum *self = (FrtSpanEnum *)FRT_ALLOC(SpanNotEnum);
|
1347
1252
|
SpanNotEnum *sxe = SpXEn(self);
|
1348
1253
|
FrtSpanNotQuery *sxq = SpXQ(query);
|
@@ -1413,8 +1318,7 @@ static FrtExplanation *spanw_explain(FrtWeight *self, FrtIndexReader *ir, int ta
|
|
1413
1318
|
if (terms->size > 0) {
|
1414
1319
|
df_i -= 2;
|
1415
1320
|
doc_freqs[df_i] = '\0';
|
1416
|
-
}
|
1417
|
-
else {
|
1321
|
+
} else {
|
1418
1322
|
doc_freqs = frt_estrdup("");
|
1419
1323
|
}
|
1420
1324
|
|
@@ -1468,27 +1372,23 @@ static FrtExplanation *spanw_explain(FrtWeight *self, FrtIndexReader *ir, int ta
|
|
1468
1372
|
if (query_expl->value == 1.0) {
|
1469
1373
|
frt_expl_destroy(expl);
|
1470
1374
|
return field_expl;
|
1471
|
-
}
|
1472
|
-
else {
|
1375
|
+
} else {
|
1473
1376
|
expl->value = (query_expl->value * field_expl->value);
|
1474
1377
|
frt_expl_add_detail(expl, field_expl);
|
1475
1378
|
return expl;
|
1476
1379
|
}
|
1477
1380
|
}
|
1478
1381
|
|
1479
|
-
static char *spanw_to_s(FrtWeight *self)
|
1480
|
-
{
|
1382
|
+
static char *spanw_to_s(FrtWeight *self) {
|
1481
1383
|
return frt_strfmt("SpanWeight(%f)", self->value);
|
1482
1384
|
}
|
1483
1385
|
|
1484
|
-
static void spanw_destroy(FrtWeight *self)
|
1485
|
-
{
|
1386
|
+
static void spanw_destroy(FrtWeight *self) {
|
1486
1387
|
frt_hs_destroy(SpW(self)->terms);
|
1487
1388
|
frt_w_destroy(self);
|
1488
1389
|
}
|
1489
1390
|
|
1490
|
-
static FrtWeight *spanw_new(FrtQuery *query, FrtSearcher *searcher)
|
1491
|
-
{
|
1391
|
+
static FrtWeight *spanw_new(FrtQuery *query, FrtSearcher *searcher) {
|
1492
1392
|
FrtHashSetEntry *hse;
|
1493
1393
|
FrtWeight *self = w_new(SpanWeight, query);
|
1494
1394
|
FrtHashSet *terms = SpQ(query)->get_terms(query);
|
@@ -1943,8 +1843,7 @@ FrtQuery *frt_spanoq_new(void) {
|
|
1943
1843
|
return frt_spanoq_init(self);
|
1944
1844
|
}
|
1945
1845
|
|
1946
|
-
FrtQuery *frt_spanoq_add_clause_nr(FrtQuery *self, FrtQuery *clause)
|
1947
|
-
{
|
1846
|
+
FrtQuery *frt_spanoq_add_clause_nr(FrtQuery *self, FrtQuery *clause) {
|
1948
1847
|
const int curr_index = SpOQ(self)->c_cnt++;
|
1949
1848
|
if (clause->type < SPAN_TERM_QUERY || clause->type > SPAN_NEAR_QUERY) {
|
1950
1849
|
FRT_RAISE(FRT_ARG_ERROR, "Tried to add a %s to a SpanOrQuery. This is not a "
|
@@ -1952,8 +1851,7 @@ FrtQuery *frt_spanoq_add_clause_nr(FrtQuery *self, FrtQuery *clause)
|
|
1952
1851
|
}
|
1953
1852
|
if (curr_index == 0) {
|
1954
1853
|
SpQ(self)->field = SpQ(clause)->field;
|
1955
|
-
}
|
1956
|
-
else if (SpQ(self)->field != SpQ(clause)->field) {
|
1854
|
+
} else if (SpQ(self)->field != SpQ(clause)->field) {
|
1957
1855
|
FRT_RAISE(FRT_ARG_ERROR, "All clauses in a SpanQuery must have the same field. "
|
1958
1856
|
"Attempted to add a SpanQuery with field \"%s\" to a SpanOrQuery "
|
1959
1857
|
"with field \"%s\"", rb_id2name(SpQ(clause)->field), rb_id2name(SpQ(self)->field));
|
@@ -1966,8 +1864,7 @@ FrtQuery *frt_spanoq_add_clause_nr(FrtQuery *self, FrtQuery *clause)
|
|
1966
1864
|
return clause;
|
1967
1865
|
}
|
1968
1866
|
|
1969
|
-
FrtQuery *frt_spanoq_add_clause(FrtQuery *self, FrtQuery *clause)
|
1970
|
-
{
|
1867
|
+
FrtQuery *frt_spanoq_add_clause(FrtQuery *self, FrtQuery *clause) {
|
1971
1868
|
FRT_REF(clause);
|
1972
1869
|
return frt_spanoq_add_clause_nr(self, clause);
|
1973
1870
|
}
|
@@ -2004,8 +1901,7 @@ static char *spannq_to_s(FrtQuery *self, ID field) {
|
|
2004
1901
|
return res;
|
2005
1902
|
}
|
2006
1903
|
|
2007
|
-
static void spannq_extract_terms(FrtQuery *self, FrtHashSet *terms)
|
2008
|
-
{
|
1904
|
+
static void spannq_extract_terms(FrtQuery *self, FrtHashSet *terms) {
|
2009
1905
|
FrtSpanNearQuery *snq = SpNQ(self);
|
2010
1906
|
int i;
|
2011
1907
|
for (i = 0; i < snq->c_cnt; i++) {
|
@@ -2014,8 +1910,7 @@ static void spannq_extract_terms(FrtQuery *self, FrtHashSet *terms)
|
|
2014
1910
|
}
|
2015
1911
|
}
|
2016
1912
|
|
2017
|
-
static FrtHashSet *spannq_get_terms(FrtQuery *self)
|
2018
|
-
{
|
1913
|
+
static FrtHashSet *spannq_get_terms(FrtQuery *self) {
|
2019
1914
|
FrtSpanNearQuery *snq = SpNQ(self);
|
2020
1915
|
FrtHashSet *terms = frt_hs_new_str(&free);
|
2021
1916
|
int i;
|
@@ -2028,8 +1923,7 @@ static FrtHashSet *spannq_get_terms(FrtQuery *self)
|
|
2028
1923
|
return terms;
|
2029
1924
|
}
|
2030
1925
|
|
2031
|
-
static FrtSpanEnum *spannq_get_spans(FrtQuery *self, FrtIndexReader *ir)
|
2032
|
-
{
|
1926
|
+
static FrtSpanEnum *spannq_get_spans(FrtQuery *self, FrtIndexReader *ir) {
|
2033
1927
|
FrtSpanNearQuery *snq = SpNQ(self);
|
2034
1928
|
|
2035
1929
|
if (snq->c_cnt == 1) {
|
@@ -2040,8 +1934,7 @@ static FrtSpanEnum *spannq_get_spans(FrtQuery *self, FrtIndexReader *ir)
|
|
2040
1934
|
return spanne_new(self, ir);
|
2041
1935
|
}
|
2042
1936
|
|
2043
|
-
static FrtQuery *spannq_rewrite(FrtQuery *self, FrtIndexReader *ir)
|
2044
|
-
{
|
1937
|
+
static FrtQuery *spannq_rewrite(FrtQuery *self, FrtIndexReader *ir) {
|
2045
1938
|
FrtSpanNearQuery *snq = SpNQ(self);
|
2046
1939
|
int i;
|
2047
1940
|
for (i = 0; i < snq->c_cnt; i++) {
|
@@ -2055,8 +1948,7 @@ static FrtQuery *spannq_rewrite(FrtQuery *self, FrtIndexReader *ir)
|
|
2055
1948
|
return self;
|
2056
1949
|
}
|
2057
1950
|
|
2058
|
-
static void spannq_destroy(FrtQuery *self)
|
2059
|
-
{
|
1951
|
+
static void spannq_destroy(FrtQuery *self) {
|
2060
1952
|
FrtSpanNearQuery *snq = SpNQ(self);
|
2061
1953
|
|
2062
1954
|
int i;
|
@@ -2069,8 +1961,7 @@ static void spannq_destroy(FrtQuery *self)
|
|
2069
1961
|
spanq_destroy_i(self);
|
2070
1962
|
}
|
2071
1963
|
|
2072
|
-
static unsigned long long spannq_hash(FrtQuery *self)
|
2073
|
-
{
|
1964
|
+
static unsigned long long spannq_hash(FrtQuery *self) {
|
2074
1965
|
int i;
|
2075
1966
|
unsigned long long hash = spanq_hash(self);
|
2076
1967
|
FrtSpanNearQuery *snq = SpNQ(self);
|
@@ -2082,8 +1973,7 @@ static unsigned long long spannq_hash(FrtQuery *self)
|
|
2082
1973
|
return ((hash ^ snq->slop) << 1) | snq->in_order;
|
2083
1974
|
}
|
2084
1975
|
|
2085
|
-
static int spannq_eq(FrtQuery *self, FrtQuery *o)
|
2086
|
-
{
|
1976
|
+
static int spannq_eq(FrtQuery *self, FrtQuery *o) {
|
2087
1977
|
int i;
|
2088
1978
|
FrtQuery *q1, *q2;
|
2089
1979
|
FrtSpanNearQuery *snq1 = SpNQ(self);
|
@@ -2138,8 +2028,7 @@ FrtQuery *frt_spannq_new(int slop, bool in_order) {
|
|
2138
2028
|
return frt_spannq_init(self, slop, in_order);
|
2139
2029
|
}
|
2140
2030
|
|
2141
|
-
FrtQuery *frt_spannq_add_clause_nr(FrtQuery *self, FrtQuery *clause)
|
2142
|
-
{
|
2031
|
+
FrtQuery *frt_spannq_add_clause_nr(FrtQuery *self, FrtQuery *clause) {
|
2143
2032
|
const int curr_index = SpNQ(self)->c_cnt++;
|
2144
2033
|
if (clause->type < SPAN_TERM_QUERY || clause->type > SPAN_NEAR_QUERY) {
|
2145
2034
|
FRT_RAISE(FRT_ARG_ERROR, "Tried to add a %s to a SpanNearQuery. This is not a "
|
@@ -2147,8 +2036,7 @@ FrtQuery *frt_spannq_add_clause_nr(FrtQuery *self, FrtQuery *clause)
|
|
2147
2036
|
}
|
2148
2037
|
if (curr_index == 0) {
|
2149
2038
|
SpQ(self)->field = SpQ(clause)->field;
|
2150
|
-
}
|
2151
|
-
else if (SpQ(self)->field != SpQ(clause)->field) {
|
2039
|
+
} else if (SpQ(self)->field != SpQ(clause)->field) {
|
2152
2040
|
FRT_RAISE(FRT_ARG_ERROR, "All clauses in a SpanQuery must have the same field. "
|
2153
2041
|
"Attempted to add a SpanQuery with field \"%s\" to SpanNearQuery "
|
2154
2042
|
"with field \"%s\"", rb_id2name(SpQ(clause)->field), rb_id2name(SpQ(self)->field));
|
@@ -2161,8 +2049,7 @@ FrtQuery *frt_spannq_add_clause_nr(FrtQuery *self, FrtQuery *clause)
|
|
2161
2049
|
return clause;
|
2162
2050
|
}
|
2163
2051
|
|
2164
|
-
FrtQuery *frt_spannq_add_clause(FrtQuery *self, FrtQuery *clause)
|
2165
|
-
{
|
2052
|
+
FrtQuery *frt_spannq_add_clause(FrtQuery *self, FrtQuery *clause) {
|
2166
2053
|
FRT_REF(clause);
|
2167
2054
|
return frt_spannq_add_clause_nr(self, clause);
|
2168
2055
|
}
|