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 @@ typedef struct MatchAllScorer {
|
|
16
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
|
-
{
|
23
|
+
static bool masc_next(FrtScorer *self) {
|
26
24
|
while (self->doc < (MASc(self)->max_doc - 1)) {
|
27
25
|
self->doc++;
|
28
26
|
if (!MASc(self)->ir->is_deleted(MASc(self)->ir, self->doc)) {
|
@@ -32,14 +30,12 @@ static bool masc_next(FrtScorer *self)
|
|
32
30
|
return false;
|
33
31
|
}
|
34
32
|
|
35
|
-
static bool masc_skip_to(FrtScorer *self, int doc_num)
|
36
|
-
{
|
33
|
+
static bool masc_skip_to(FrtScorer *self, int doc_num) {
|
37
34
|
self->doc = 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");
|
@@ -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
|
}
|
@@ -1957,8 +1957,7 @@ static const char *not_word = " \t()[]{}!\"~^|<>=";
|
|
1957
1957
|
* Note that +get_word+ is also responsible for returning field names and
|
1958
1958
|
* matching the special tokens 'AND', 'NOT', 'REQ' and 'OR'.
|
1959
1959
|
*/
|
1960
|
-
static int get_word(YYSTYPE *lvalp, FrtQParser *qp)
|
1961
|
-
{
|
1960
|
+
static int get_word(YYSTYPE *lvalp, FrtQParser *qp) {
|
1962
1961
|
bool is_wild = false;
|
1963
1962
|
int len;
|
1964
1963
|
char c;
|
@@ -1978,8 +1977,7 @@ static int get_word(YYSTYPE *lvalp, FrtQParser *qp)
|
|
1978
1977
|
case '\\':
|
1979
1978
|
if ((c = *qp->qstrp) == '\0') {
|
1980
1979
|
*bufp++ = '\\';
|
1981
|
-
}
|
1982
|
-
else {
|
1980
|
+
} else {
|
1983
1981
|
*bufp++ = c;
|
1984
1982
|
qp->qstrp++;
|
1985
1983
|
}
|
@@ -1989,8 +1987,7 @@ static int get_word(YYSTYPE *lvalp, FrtQParser *qp)
|
|
1989
1987
|
qp->qstrp++;
|
1990
1988
|
*bufp++ = ':';
|
1991
1989
|
*bufp++ = ':';
|
1992
|
-
}
|
1993
|
-
else {
|
1990
|
+
} else {
|
1994
1991
|
goto get_word_done;
|
1995
1992
|
}
|
1996
1993
|
break;
|
@@ -2061,8 +2058,7 @@ get_word_done:
|
|
2061
2058
|
* If no special characters or tokens are found then yylex delegates to
|
2062
2059
|
* +get_word+ which will fetch the next query-word.
|
2063
2060
|
*/
|
2064
|
-
static int yylex(YYSTYPE *lvalp, FrtQParser *qp)
|
2065
|
-
{
|
2061
|
+
static int yylex(YYSTYPE *lvalp, FrtQParser *qp) {
|
2066
2062
|
char c, nc;
|
2067
2063
|
|
2068
2064
|
while ((c=*qp->qstrp++) == ' ' || c == '\t') {
|
@@ -2104,8 +2100,7 @@ static int yylex(YYSTYPE *lvalp, FrtQParser *qp)
|
|
2104
2100
|
* It is responsible for clearing any memory that was allocated during the
|
2105
2101
|
* parsing process.
|
2106
2102
|
*/
|
2107
|
-
static int yyerror(FrtQParser *qp, rb_encoding *encoding, char const *msg)
|
2108
|
-
{
|
2103
|
+
static int yyerror(FrtQParser *qp, rb_encoding *encoding, char const *msg) {
|
2109
2104
|
(void)encoding;
|
2110
2105
|
qp->destruct = true;
|
2111
2106
|
if (!qp->handle_parse_errors) {
|
@@ -2143,12 +2138,10 @@ static FrtTokenStream *get_cached_ts(FrtQParser *qp, ID field, char *text, rb_en
|
|
2143
2138
|
if (!ts) {
|
2144
2139
|
ts = frt_a_get_ts(qp->analyzer, field, text, encoding);
|
2145
2140
|
frt_h_set(qp->ts_cache, (void *)field, ts);
|
2146
|
-
}
|
2147
|
-
else {
|
2141
|
+
} else {
|
2148
2142
|
ts->reset(ts, text, encoding);
|
2149
2143
|
}
|
2150
|
-
}
|
2151
|
-
else {
|
2144
|
+
} else {
|
2152
2145
|
ts = qp->non_tokenizer;
|
2153
2146
|
ts->reset(ts, text, encoding);
|
2154
2147
|
}
|
@@ -2160,29 +2153,25 @@ static FrtTokenStream *get_cached_ts(FrtQParser *qp, ID field, char *text, rb_en
|
|
2160
2153
|
* if 0 or 1 clauses are present to NULL or the actual query in the clause
|
2161
2154
|
* respectively.
|
2162
2155
|
*/
|
2163
|
-
static FrtQuery *get_bool_q(FrtBCArray *bca)
|
2164
|
-
{
|
2156
|
+
static FrtQuery *get_bool_q(FrtBCArray *bca) {
|
2165
2157
|
FrtQuery *q;
|
2166
2158
|
const int clause_count = bca->size;
|
2167
2159
|
|
2168
2160
|
if (clause_count == 0) {
|
2169
2161
|
q = NULL;
|
2170
2162
|
free(bca->clauses);
|
2171
|
-
}
|
2172
|
-
else if (clause_count == 1) {
|
2163
|
+
} else if (clause_count == 1) {
|
2173
2164
|
FrtBooleanClause *bc = bca->clauses[0];
|
2174
2165
|
if (bc->is_prohibited) {
|
2175
2166
|
q = frt_bq_new(false);
|
2176
2167
|
frt_bq_add_query_nr(q, bc->query, FRT_BC_MUST_NOT);
|
2177
2168
|
frt_bq_add_query_nr(q, frt_maq_new(), FRT_BC_MUST);
|
2178
|
-
}
|
2179
|
-
else {
|
2169
|
+
} else {
|
2180
2170
|
q = bc->query;
|
2181
2171
|
}
|
2182
2172
|
free(bc);
|
2183
2173
|
free(bca->clauses);
|
2184
|
-
}
|
2185
|
-
else {
|
2174
|
+
} else {
|
2186
2175
|
q = frt_bq_new(false);
|
2187
2176
|
/* copy clauses into query */
|
2188
2177
|
|
@@ -2199,8 +2188,7 @@ static FrtQuery *get_bool_q(FrtBCArray *bca)
|
|
2199
2188
|
* Base method for appending BooleanClauses to a FrtBooleanClause array. This
|
2200
2189
|
* method doesn't care about the type of clause (MUST, SHOULD, MUST_NOT).
|
2201
2190
|
*/
|
2202
|
-
static void bca_add_clause(FrtBCArray *bca, FrtBooleanClause *clause)
|
2203
|
-
{
|
2191
|
+
static void bca_add_clause(FrtBCArray *bca, FrtBooleanClause *clause) {
|
2204
2192
|
if (bca->size >= bca->capa) {
|
2205
2193
|
bca->capa <<= 1;
|
2206
2194
|
FRT_REALLOC_N(bca->clauses, FrtBooleanClause *, bca->capa);
|
@@ -2213,8 +2201,7 @@ static void bca_add_clause(FrtBCArray *bca, FrtBooleanClause *clause)
|
|
2213
2201
|
* Add the first clause to a BooleanClause array. This method is also
|
2214
2202
|
* responsible for allocating a new BooleanClause array.
|
2215
2203
|
*/
|
2216
|
-
static FrtBCArray *first_cls(FrtBooleanClause *clause)
|
2217
|
-
{
|
2204
|
+
static FrtBCArray *first_cls(FrtBooleanClause *clause) {
|
2218
2205
|
FrtBCArray *bca = FRT_ALLOC_AND_ZERO(FrtBCArray);
|
2219
2206
|
bca->capa = BCA_INIT_CAPA;
|
2220
2207
|
bca->clauses = FRT_ALLOC_N(FrtBooleanClause *, BCA_INIT_CAPA);
|
@@ -2230,8 +2217,7 @@ static FrtBCArray *first_cls(FrtBooleanClause *clause)
|
|
2230
2217
|
* MUST clauses. (If they are currently MUST_NOT clauses they stay as they
|
2231
2218
|
* are.)
|
2232
2219
|
*/
|
2233
|
-
static FrtBCArray *add_and_cls(FrtBCArray *bca, FrtBooleanClause *clause)
|
2234
|
-
{
|
2220
|
+
static FrtBCArray *add_and_cls(FrtBCArray *bca, FrtBooleanClause *clause) {
|
2235
2221
|
if (clause) {
|
2236
2222
|
if (bca->size == 1) {
|
2237
2223
|
if (!bca->clauses[0]->is_prohibited) {
|
@@ -2249,8 +2235,7 @@ static FrtBCArray *add_and_cls(FrtBCArray *bca, FrtBooleanClause *clause)
|
|
2249
2235
|
/**
|
2250
2236
|
* Add SHOULD clause to the BooleanClause array.
|
2251
2237
|
*/
|
2252
|
-
static FrtBCArray *add_or_cls(FrtBCArray *bca, FrtBooleanClause *clause)
|
2253
|
-
{
|
2238
|
+
static FrtBCArray *add_or_cls(FrtBCArray *bca, FrtBooleanClause *clause) {
|
2254
2239
|
if (clause) {
|
2255
2240
|
bca_add_clause(bca, clause);
|
2256
2241
|
}
|
@@ -2262,12 +2247,10 @@ static FrtBCArray *add_or_cls(FrtBCArray *bca, FrtBooleanClause *clause)
|
|
2262
2247
|
* clause type.
|
2263
2248
|
*/
|
2264
2249
|
static FrtBCArray *add_default_cls(FrtQParser *qp, FrtBCArray *bca,
|
2265
|
-
FrtBooleanClause *clause)
|
2266
|
-
{
|
2250
|
+
FrtBooleanClause *clause) {
|
2267
2251
|
if (qp->or_default) {
|
2268
2252
|
add_or_cls(bca, clause);
|
2269
|
-
}
|
2270
|
-
else {
|
2253
|
+
} else {
|
2271
2254
|
add_and_cls(bca, clause);
|
2272
2255
|
}
|
2273
2256
|
return bca;
|
@@ -2276,8 +2259,7 @@ static FrtBCArray *add_default_cls(FrtQParser *qp, FrtBCArray *bca,
|
|
2276
2259
|
/**
|
2277
2260
|
* destroy array of BooleanClauses
|
2278
2261
|
*/
|
2279
|
-
static void bca_destroy(FrtBCArray *bca)
|
2280
|
-
{
|
2262
|
+
static void bca_destroy(FrtBCArray *bca) {
|
2281
2263
|
int i;
|
2282
2264
|
for (i = 0; i < bca->size; i++) {
|
2283
2265
|
frt_bc_deref(bca->clauses[i]);
|
@@ -2289,12 +2271,10 @@ static void bca_destroy(FrtBCArray *bca)
|
|
2289
2271
|
/**
|
2290
2272
|
* Turn a query into a BooleanClause for addition to a BooleanQuery.
|
2291
2273
|
*/
|
2292
|
-
static FrtBooleanClause *get_bool_cls(FrtQuery *q, FrtBCType occur)
|
2293
|
-
{
|
2274
|
+
static FrtBooleanClause *get_bool_cls(FrtQuery *q, FrtBCType occur) {
|
2294
2275
|
if (q) {
|
2295
2276
|
return frt_bc_new(q, occur);
|
2296
|
-
}
|
2297
|
-
else {
|
2277
|
+
} else {
|
2298
2278
|
return NULL;
|
2299
2279
|
}
|
2300
2280
|
}
|
@@ -2314,8 +2294,7 @@ static FrtQuery *get_term_q(FrtQParser *qp, ID field, char *word, rb_encoding *e
|
|
2314
2294
|
|
2315
2295
|
if ((token = frt_ts_next(stream)) == NULL) {
|
2316
2296
|
q = NULL;
|
2317
|
-
}
|
2318
|
-
else {
|
2297
|
+
} else {
|
2319
2298
|
q = frt_tq_new(field, token->text);
|
2320
2299
|
if ((token = frt_ts_next(stream)) != NULL) {
|
2321
2300
|
/* Less likely case, destroy the term query and create a
|
@@ -2329,8 +2308,7 @@ static FrtQuery *get_term_q(FrtQParser *qp, ID field, char *word, rb_encoding *e
|
|
2329
2308
|
frt_phq_add_term(q, token->text, token->pos_inc);
|
2330
2309
|
/* add some slop since single term was expected */
|
2331
2310
|
((FrtPhraseQuery *)q)->slop++;
|
2332
|
-
}
|
2333
|
-
else {
|
2311
|
+
} else {
|
2334
2312
|
frt_phq_append_multi_term(q, token->text);
|
2335
2313
|
}
|
2336
2314
|
} while ((token = frt_ts_next(stream)) != NULL);
|
@@ -2351,8 +2329,7 @@ static FrtQuery *get_fuzzy_q(FrtQParser *qp, ID field, char *word, char *slop_st
|
|
2351
2329
|
|
2352
2330
|
if ((token = frt_ts_next(stream)) == NULL) {
|
2353
2331
|
q = NULL;
|
2354
|
-
}
|
2355
|
-
else {
|
2332
|
+
} else {
|
2356
2333
|
/* it only makes sense to find one term in a fuzzy query */
|
2357
2334
|
float slop = frt_qp_default_fuzzy_min_sim;
|
2358
2335
|
if (slop_str) {
|
@@ -2423,8 +2400,7 @@ static FrtQuery *get_wild_q(FrtQParser *qp, ID field, char *pattern, rb_encoding
|
|
2423
2400
|
pattern[len - 1] = 0;
|
2424
2401
|
q = frt_prefixq_new(field, pattern);
|
2425
2402
|
pattern[len - 1] = '*';
|
2426
|
-
}
|
2427
|
-
else {
|
2403
|
+
} else {
|
2428
2404
|
q = frt_wcq_new(field, pattern);
|
2429
2405
|
}
|
2430
2406
|
FrtMTQMaxTerms(q) = qp->max_clauses;
|
@@ -2447,8 +2423,7 @@ static FrtHashSet *add_field(FrtQParser *qp, const char *field_name) {
|
|
2447
2423
|
* will push a new FieldStack object onto the stack and add +field+ to its
|
2448
2424
|
* fields set.
|
2449
2425
|
*/
|
2450
|
-
static FrtHashSet *first_field(FrtQParser *qp, const char *field_name)
|
2451
|
-
{
|
2426
|
+
static FrtHashSet *first_field(FrtQParser *qp, const char *field_name) {
|
2452
2427
|
qp_push_fields(qp, frt_hs_new_ptr(NULL), true);
|
2453
2428
|
return add_field(qp, field_name);
|
2454
2429
|
}
|
@@ -2456,8 +2431,7 @@ static FrtHashSet *first_field(FrtQParser *qp, const char *field_name)
|
|
2456
2431
|
/**
|
2457
2432
|
* Destroy a phrase object freeing all allocated memory.
|
2458
2433
|
*/
|
2459
|
-
static void ph_destroy(Phrase *self)
|
2460
|
-
{
|
2434
|
+
static void ph_destroy(Phrase *self) {
|
2461
2435
|
int i;
|
2462
2436
|
for (i = 0; i < self->size; i++) {
|
2463
2437
|
frt_ary_destroy(self->positions[i].terms, &free);
|
@@ -2470,8 +2444,7 @@ static void ph_destroy(Phrase *self)
|
|
2470
2444
|
/**
|
2471
2445
|
* Allocate a new Phrase object
|
2472
2446
|
*/
|
2473
|
-
static Phrase *ph_new()
|
2474
|
-
{
|
2447
|
+
static Phrase *ph_new() {
|
2475
2448
|
Phrase *self = FRT_ALLOC_AND_ZERO(Phrase);
|
2476
2449
|
self->capa = PHRASE_INIT_CAPA;
|
2477
2450
|
self->positions = FRT_ALLOC_AND_ZERO_N(FrtPhrasePosition, PHRASE_INIT_CAPA);
|
@@ -2482,8 +2455,7 @@ static Phrase *ph_new()
|
|
2482
2455
|
* Add the first word to the phrase. This method is also in charge of
|
2483
2456
|
* allocating a new Phrase object.
|
2484
2457
|
*/
|
2485
|
-
static Phrase *ph_first_word(char *word)
|
2486
|
-
{
|
2458
|
+
static Phrase *ph_first_word(char *word) {
|
2487
2459
|
Phrase *self = ph_new();
|
2488
2460
|
if (word) { /* no point in adding NULL in start */
|
2489
2461
|
self->positions[0].terms = frt_ary_new_type_capa(char *, 1);
|
@@ -2496,8 +2468,7 @@ static Phrase *ph_first_word(char *word)
|
|
2496
2468
|
/**
|
2497
2469
|
* Add a new word to the Phrase
|
2498
2470
|
*/
|
2499
|
-
static Phrase *ph_add_word(Phrase *self, char *word)
|
2500
|
-
{
|
2471
|
+
static Phrase *ph_add_word(Phrase *self, char *word) {
|
2501
2472
|
if (word) {
|
2502
2473
|
const int index = self->size;
|
2503
2474
|
FrtPhrasePosition *pp = self->positions;
|
@@ -2511,8 +2482,7 @@ static Phrase *ph_add_word(Phrase *self, char *word)
|
|
2511
2482
|
frt_ary_push(pp[index].terms, frt_estrdup(word));
|
2512
2483
|
self->size++;
|
2513
2484
|
self->pos_inc = 0;
|
2514
|
-
}
|
2515
|
-
else {
|
2485
|
+
} else {
|
2516
2486
|
self->pos_inc++;
|
2517
2487
|
}
|
2518
2488
|
return self;
|
@@ -2522,8 +2492,7 @@ static Phrase *ph_add_word(Phrase *self, char *word)
|
|
2522
2492
|
* Adds a word to the Phrase object in the same position as the previous word
|
2523
2493
|
* added to the Phrase. This will later be turned into a multi-PhraseQuery.
|
2524
2494
|
*/
|
2525
|
-
static Phrase *ph_add_multi_word(Phrase *self, char *word)
|
2526
|
-
{
|
2495
|
+
static Phrase *ph_add_multi_word(Phrase *self, char *word) {
|
2527
2496
|
const int index = self->size - 1;
|
2528
2497
|
FrtPhrasePosition *pp = self->positions;
|
2529
2498
|
|
@@ -2570,8 +2539,7 @@ static FrtQuery *get_phrase_query(FrtQParser *qp, ID field, Phrase *phrase, char
|
|
2570
2539
|
const int word_count = frt_ary_size(words);
|
2571
2540
|
if (word_count == 1) {
|
2572
2541
|
q = get_term_q(qp, field, words[0], encoding);
|
2573
|
-
}
|
2574
|
-
else {
|
2542
|
+
} else {
|
2575
2543
|
int i;
|
2576
2544
|
int term_cnt = 0;
|
2577
2545
|
FrtToken *token;
|
@@ -2583,8 +2551,7 @@ static FrtQuery *get_phrase_query(FrtQParser *qp, ID field, Phrase *phrase, char
|
|
2583
2551
|
free(words[i]);
|
2584
2552
|
last_word = words[i] = frt_estrdup(token->text);
|
2585
2553
|
++term_cnt;
|
2586
|
-
}
|
2587
|
-
else {
|
2554
|
+
} else {
|
2588
2555
|
/* empty words will later be ignored */
|
2589
2556
|
words[i][0] = '\0';
|
2590
2557
|
}
|
@@ -2608,8 +2575,7 @@ static FrtQuery *get_phrase_query(FrtQParser *qp, ID field, Phrase *phrase, char
|
|
2608
2575
|
break;
|
2609
2576
|
}
|
2610
2577
|
}
|
2611
|
-
}
|
2612
|
-
else if (pos_cnt > 1) {
|
2578
|
+
} else if (pos_cnt > 1) {
|
2613
2579
|
FrtToken *token;
|
2614
2580
|
FrtTokenStream *stream;
|
2615
2581
|
int i, j;
|
@@ -2635,15 +2601,13 @@ static FrtQuery *get_phrase_query(FrtQParser *qp, ID field, Phrase *phrase, char
|
|
2635
2601
|
if (token->pos_inc) {
|
2636
2602
|
frt_phq_add_term(q, token->text,
|
2637
2603
|
pos_inc ? pos_inc : token->pos_inc);
|
2638
|
-
}
|
2639
|
-
else {
|
2604
|
+
} else {
|
2640
2605
|
frt_phq_append_multi_term(q, token->text);
|
2641
2606
|
((FrtPhraseQuery *)q)->slop++;
|
2642
2607
|
}
|
2643
2608
|
pos_inc = 0;
|
2644
2609
|
}
|
2645
|
-
}
|
2646
|
-
else {
|
2610
|
+
} else {
|
2647
2611
|
bool added_position = false;
|
2648
2612
|
|
2649
2613
|
for (j = 0; j < word_count; j++) {
|
@@ -2654,8 +2618,7 @@ static FrtQuery *get_phrase_query(FrtQParser *qp, ID field, Phrase *phrase, char
|
|
2654
2618
|
pos_inc ? pos_inc : token->pos_inc);
|
2655
2619
|
added_position = true;
|
2656
2620
|
pos_inc = 0;
|
2657
|
-
}
|
2658
|
-
else {
|
2621
|
+
} else {
|
2659
2622
|
frt_phq_append_multi_term(q, token->text);
|
2660
2623
|
}
|
2661
2624
|
}
|
@@ -2671,8 +2634,7 @@ static FrtQuery *get_phrase_query(FrtQParser *qp, ID field, Phrase *phrase, char
|
|
2671
2634
|
* the query parser as the all PhraseQuery didn't work well for this. Once the
|
2672
2635
|
* PhraseQuery has been built the Phrase object needs to be destroyed.
|
2673
2636
|
*/
|
2674
|
-
static FrtQuery *get_phrase_q(FrtQParser *qp, Phrase *phrase, char *slop_str, rb_encoding *encoding)
|
2675
|
-
{
|
2637
|
+
static FrtQuery *get_phrase_q(FrtQParser *qp, Phrase *phrase, char *slop_str, rb_encoding *encoding) {
|
2676
2638
|
FrtQuery *volatile q = NULL;
|
2677
2639
|
FLDS(q, get_phrase_query(qp, field, phrase, slop_str, encoding));
|
2678
2640
|
ph_destroy(phrase);
|
@@ -2724,8 +2686,7 @@ static FrtQuery *get_r_q(FrtQParser *qp, ID field, char *from, char *to, bool in
|
|
2724
2686
|
* the bottom of the stack (ie the very first set of fields pushed onto the
|
2725
2687
|
* stack).
|
2726
2688
|
*/
|
2727
|
-
static void qp_push_fields(FrtQParser *self, FrtHashSet *fields, bool destroy)
|
2728
|
-
{
|
2689
|
+
static void qp_push_fields(FrtQParser *self, FrtHashSet *fields, bool destroy) {
|
2729
2690
|
FrtFieldStack *fs = FRT_ALLOC(FrtFieldStack);
|
2730
2691
|
|
2731
2692
|
fs->next = self->fields_top;
|
@@ -2741,8 +2702,7 @@ static void qp_push_fields(FrtQParser *self, FrtHashSet *fields, bool destroy)
|
|
2741
2702
|
* get called when query modified by a field modifier ("field1|field2:") has
|
2742
2703
|
* been fully parsed and the field specifier no longer applies.
|
2743
2704
|
*/
|
2744
|
-
static void qp_pop_fields(FrtQParser *self)
|
2745
|
-
{
|
2705
|
+
static void qp_pop_fields(FrtQParser *self) {
|
2746
2706
|
FrtFieldStack *fs = self->fields_top;
|
2747
2707
|
|
2748
2708
|
if (fs->destroy) {
|
@@ -2758,8 +2718,7 @@ static void qp_pop_fields(FrtQParser *self)
|
|
2758
2718
|
/**
|
2759
2719
|
* Free all memory allocated by the QueryParser.
|
2760
2720
|
*/
|
2761
|
-
void frt_qp_destroy(FrtQParser *self)
|
2762
|
-
{
|
2721
|
+
void frt_qp_destroy(FrtQParser *self) {
|
2763
2722
|
if (self->tokenized_fields != self->all_fields) {
|
2764
2723
|
frt_hs_destroy(self->tokenized_fields);
|
2765
2724
|
}
|
@@ -2838,8 +2797,7 @@ static const char *PHRASE_CHARS = "<>|\"";
|
|
2838
2797
|
* +str_insert_char+ inserts a character at the beginning of a string by
|
2839
2798
|
* shifting the rest of the string right.
|
2840
2799
|
*/
|
2841
|
-
static void str_insert_char(char *str, int len, char chr)
|
2842
|
-
{
|
2800
|
+
static void str_insert_char(char *str, int len, char chr) {
|
2843
2801
|
memmove(str+1, str, len*sizeof(char));
|
2844
2802
|
*str = chr;
|
2845
2803
|
}
|
@@ -2857,8 +2815,7 @@ static void str_insert_char(char *str, int len, char chr)
|
|
2857
2815
|
* ( <>,|," ). Note that '<' and '>' will also be escaped unless the appear
|
2858
2816
|
* together like so; '<>'.
|
2859
2817
|
*/
|
2860
|
-
char *frt_qp_clean_str(char *str)
|
2861
|
-
{
|
2818
|
+
char *frt_qp_clean_str(char *str) {
|
2862
2819
|
int b, pb = -1;
|
2863
2820
|
int br_cnt = 0;
|
2864
2821
|
bool quote_open = false;
|
@@ -2892,8 +2849,7 @@ char *frt_qp_clean_str(char *str)
|
|
2892
2849
|
case '(':
|
2893
2850
|
if (!quote_open) {
|
2894
2851
|
br_cnt++;
|
2895
|
-
}
|
2896
|
-
else {
|
2852
|
+
} else {
|
2897
2853
|
*nsp++ = '\\';
|
2898
2854
|
}
|
2899
2855
|
*nsp++ = b;
|
@@ -2903,12 +2859,10 @@ char *frt_qp_clean_str(char *str)
|
|
2903
2859
|
if (br_cnt == 0) {
|
2904
2860
|
str_insert_char(new_str, (int)(nsp - new_str), '(');
|
2905
2861
|
nsp++;
|
2906
|
-
}
|
2907
|
-
else {
|
2862
|
+
} else {
|
2908
2863
|
br_cnt--;
|
2909
2864
|
}
|
2910
|
-
}
|
2911
|
-
else {
|
2865
|
+
} else {
|
2912
2866
|
*nsp++ = '\\';
|
2913
2867
|
}
|
2914
2868
|
*nsp++ = b;
|
@@ -2919,8 +2873,7 @@ char *frt_qp_clean_str(char *str)
|
|
2919
2873
|
/* remove the escape character */
|
2920
2874
|
nsp--;
|
2921
2875
|
nsp[-1] = '<';
|
2922
|
-
}
|
2923
|
-
else {
|
2876
|
+
} else {
|
2924
2877
|
*nsp++ = '\\';
|
2925
2878
|
}
|
2926
2879
|
}
|
@@ -2951,8 +2904,7 @@ char *frt_qp_clean_str(char *str)
|
|
2951
2904
|
* analyzer. It then turns these tokens (if any) into a boolean query. If it
|
2952
2905
|
* fails to find any tokens, this method will return NULL.
|
2953
2906
|
*/
|
2954
|
-
static FrtQuery *qp_get_bad_query(FrtQParser *qp, char *str, rb_encoding *encoding)
|
2955
|
-
{
|
2907
|
+
static FrtQuery *qp_get_bad_query(FrtQParser *qp, char *str, rb_encoding *encoding) {
|
2956
2908
|
FrtQuery *volatile q = NULL;
|
2957
2909
|
qp->recovering = true;
|
2958
2910
|
assert(qp->fields_top->next == NULL);
|
@@ -2968,8 +2920,7 @@ static FrtQuery *qp_get_bad_query(FrtQParser *qp, char *str, rb_encoding *encodi
|
|
2968
2920
|
* and turns them into a boolean query on the default fields.
|
2969
2921
|
*/
|
2970
2922
|
|
2971
|
-
FrtQuery *qp_parse(FrtQParser *self, char *query_string, rb_encoding *encoding)
|
2972
|
-
{
|
2923
|
+
FrtQuery *qp_parse(FrtQParser *self, char *query_string, rb_encoding *encoding) {
|
2973
2924
|
FrtQuery *result = NULL;
|
2974
2925
|
char *qstr;
|
2975
2926
|
unsigned char *dp_start = NULL;
|