ferret 0.11.6 → 0.11.8.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. data/README +10 -22
  2. data/RELEASE_CHANGES +137 -0
  3. data/RELEASE_NOTES +60 -0
  4. data/Rakefile +379 -274
  5. data/TODO +100 -8
  6. data/bin/ferret-browser +0 -0
  7. data/ext/BZLIB_blocksort.c +1094 -0
  8. data/ext/BZLIB_bzlib.c +1578 -0
  9. data/ext/BZLIB_compress.c +672 -0
  10. data/ext/BZLIB_crctable.c +104 -0
  11. data/ext/BZLIB_decompress.c +626 -0
  12. data/ext/BZLIB_huffman.c +205 -0
  13. data/ext/BZLIB_randtable.c +84 -0
  14. data/ext/{api.c → STEMMER_api.c} +7 -10
  15. data/ext/{libstemmer.c → STEMMER_libstemmer.c} +3 -2
  16. data/ext/{stem_ISO_8859_1_danish.c → STEMMER_stem_ISO_8859_1_danish.c} +123 -124
  17. data/ext/{stem_ISO_8859_1_dutch.c → STEMMER_stem_ISO_8859_1_dutch.c} +177 -188
  18. data/ext/STEMMER_stem_ISO_8859_1_english.c +1117 -0
  19. data/ext/{stem_ISO_8859_1_finnish.c → STEMMER_stem_ISO_8859_1_finnish.c} +276 -306
  20. data/ext/STEMMER_stem_ISO_8859_1_french.c +1246 -0
  21. data/ext/{stem_ISO_8859_1_german.c → STEMMER_stem_ISO_8859_1_german.c} +161 -170
  22. data/ext/STEMMER_stem_ISO_8859_1_hungarian.c +1230 -0
  23. data/ext/STEMMER_stem_ISO_8859_1_italian.c +1065 -0
  24. data/ext/STEMMER_stem_ISO_8859_1_norwegian.c +297 -0
  25. data/ext/{stem_ISO_8859_1_porter.c → STEMMER_stem_ISO_8859_1_porter.c} +263 -290
  26. data/ext/{stem_ISO_8859_1_portuguese.c → STEMMER_stem_ISO_8859_1_portuguese.c} +362 -380
  27. data/ext/STEMMER_stem_ISO_8859_1_spanish.c +1093 -0
  28. data/ext/STEMMER_stem_ISO_8859_1_swedish.c +307 -0
  29. data/ext/STEMMER_stem_ISO_8859_2_romanian.c +998 -0
  30. data/ext/{stem_KOI8_R_russian.c → STEMMER_stem_KOI8_R_russian.c} +244 -245
  31. data/ext/STEMMER_stem_UTF_8_danish.c +339 -0
  32. data/ext/{stem_UTF_8_dutch.c → STEMMER_stem_UTF_8_dutch.c} +192 -211
  33. data/ext/STEMMER_stem_UTF_8_english.c +1125 -0
  34. data/ext/{stem_UTF_8_finnish.c → STEMMER_stem_UTF_8_finnish.c} +284 -324
  35. data/ext/STEMMER_stem_UTF_8_french.c +1256 -0
  36. data/ext/{stem_UTF_8_german.c → STEMMER_stem_UTF_8_german.c} +170 -187
  37. data/ext/STEMMER_stem_UTF_8_hungarian.c +1234 -0
  38. data/ext/STEMMER_stem_UTF_8_italian.c +1073 -0
  39. data/ext/STEMMER_stem_UTF_8_norwegian.c +299 -0
  40. data/ext/{stem_UTF_8_porter.c → STEMMER_stem_UTF_8_porter.c} +271 -310
  41. data/ext/STEMMER_stem_UTF_8_portuguese.c +1023 -0
  42. data/ext/STEMMER_stem_UTF_8_romanian.c +1004 -0
  43. data/ext/STEMMER_stem_UTF_8_russian.c +694 -0
  44. data/ext/STEMMER_stem_UTF_8_spanish.c +1097 -0
  45. data/ext/STEMMER_stem_UTF_8_swedish.c +309 -0
  46. data/ext/STEMMER_stem_UTF_8_turkish.c +2205 -0
  47. data/ext/{utilities.c → STEMMER_utilities.c} +100 -68
  48. data/ext/analysis.c +276 -121
  49. data/ext/analysis.h +190 -143
  50. data/ext/api.h +3 -4
  51. data/ext/array.c +5 -3
  52. data/ext/array.h +52 -43
  53. data/ext/bitvector.c +38 -482
  54. data/ext/bitvector.h +446 -124
  55. data/ext/bzlib.h +282 -0
  56. data/ext/bzlib_private.h +503 -0
  57. data/ext/compound_io.c +23 -22
  58. data/ext/config.h +21 -11
  59. data/ext/document.c +43 -40
  60. data/ext/document.h +31 -21
  61. data/ext/except.c +20 -38
  62. data/ext/except.h +89 -76
  63. data/ext/extconf.rb +3 -2
  64. data/ext/ferret.c +49 -35
  65. data/ext/ferret.h +14 -11
  66. data/ext/field_index.c +262 -0
  67. data/ext/field_index.h +52 -0
  68. data/ext/filter.c +11 -10
  69. data/ext/fs_store.c +65 -47
  70. data/ext/global.c +245 -165
  71. data/ext/global.h +252 -54
  72. data/ext/hash.c +200 -243
  73. data/ext/hash.h +205 -163
  74. data/ext/hashset.c +118 -96
  75. data/ext/hashset.h +110 -82
  76. data/ext/header.h +19 -19
  77. data/ext/helper.c +11 -10
  78. data/ext/helper.h +14 -6
  79. data/ext/index.c +745 -366
  80. data/ext/index.h +503 -529
  81. data/ext/internal.h +1020 -0
  82. data/ext/lang.c +10 -0
  83. data/ext/lang.h +35 -15
  84. data/ext/mempool.c +5 -4
  85. data/ext/mempool.h +30 -22
  86. data/ext/modules.h +35 -7
  87. data/ext/multimapper.c +43 -2
  88. data/ext/multimapper.h +32 -23
  89. data/ext/posh.c +0 -0
  90. data/ext/posh.h +4 -38
  91. data/ext/priorityqueue.c +10 -12
  92. data/ext/priorityqueue.h +33 -21
  93. data/ext/q_boolean.c +22 -9
  94. data/ext/q_const_score.c +3 -2
  95. data/ext/q_filtered_query.c +15 -12
  96. data/ext/q_fuzzy.c +147 -135
  97. data/ext/q_match_all.c +3 -2
  98. data/ext/q_multi_term.c +28 -32
  99. data/ext/q_parser.c +451 -173
  100. data/ext/q_phrase.c +158 -79
  101. data/ext/q_prefix.c +16 -18
  102. data/ext/q_range.c +363 -31
  103. data/ext/q_span.c +130 -141
  104. data/ext/q_term.c +21 -21
  105. data/ext/q_wildcard.c +19 -23
  106. data/ext/r_analysis.c +369 -242
  107. data/ext/r_index.c +421 -434
  108. data/ext/r_qparser.c +142 -92
  109. data/ext/r_search.c +790 -407
  110. data/ext/r_store.c +44 -44
  111. data/ext/r_utils.c +264 -96
  112. data/ext/ram_store.c +29 -23
  113. data/ext/scanner.c +895 -0
  114. data/ext/scanner.h +36 -0
  115. data/ext/scanner_mb.c +6701 -0
  116. data/ext/scanner_utf8.c +4415 -0
  117. data/ext/search.c +210 -87
  118. data/ext/search.h +556 -488
  119. data/ext/similarity.c +17 -16
  120. data/ext/similarity.h +51 -44
  121. data/ext/sort.c +157 -354
  122. data/ext/stem_ISO_8859_1_hungarian.h +16 -0
  123. data/ext/stem_ISO_8859_2_romanian.h +16 -0
  124. data/ext/stem_UTF_8_hungarian.h +16 -0
  125. data/ext/stem_UTF_8_romanian.h +16 -0
  126. data/ext/stem_UTF_8_turkish.h +16 -0
  127. data/ext/stopwords.c +287 -278
  128. data/ext/store.c +57 -51
  129. data/ext/store.h +308 -286
  130. data/ext/symbol.c +10 -0
  131. data/ext/symbol.h +23 -0
  132. data/ext/term_vectors.c +14 -293
  133. data/ext/threading.h +22 -22
  134. data/ext/win32.h +12 -4
  135. data/lib/ferret.rb +2 -1
  136. data/lib/ferret/browser.rb +1 -1
  137. data/lib/ferret/field_symbol.rb +94 -0
  138. data/lib/ferret/index.rb +221 -34
  139. data/lib/ferret/number_tools.rb +6 -6
  140. data/lib/ferret/version.rb +3 -0
  141. data/test/{unit → long_running}/largefile/tc_largefile.rb +1 -1
  142. data/test/test_helper.rb +7 -2
  143. data/test/test_installed.rb +1 -0
  144. data/test/threading/thread_safety_index_test.rb +10 -1
  145. data/test/threading/thread_safety_read_write_test.rb +4 -7
  146. data/test/threading/thread_safety_test.rb +0 -0
  147. data/test/unit/analysis/tc_analyzer.rb +29 -27
  148. data/test/unit/analysis/tc_token_stream.rb +23 -16
  149. data/test/unit/index/tc_index.rb +116 -11
  150. data/test/unit/index/tc_index_reader.rb +27 -27
  151. data/test/unit/index/tc_index_writer.rb +10 -0
  152. data/test/unit/index/th_doc.rb +38 -21
  153. data/test/unit/search/tc_filter.rb +31 -10
  154. data/test/unit/search/tc_index_searcher.rb +6 -0
  155. data/test/unit/search/tm_searcher.rb +53 -1
  156. data/test/unit/store/tc_fs_store.rb +40 -2
  157. data/test/unit/store/tc_ram_store.rb +0 -0
  158. data/test/unit/store/tm_store.rb +0 -0
  159. data/test/unit/store/tm_store_lock.rb +7 -6
  160. data/test/unit/tc_field_symbol.rb +26 -0
  161. data/test/unit/ts_analysis.rb +0 -0
  162. data/test/unit/ts_index.rb +0 -0
  163. data/test/unit/ts_store.rb +0 -0
  164. data/test/unit/ts_utils.rb +0 -0
  165. data/test/unit/utils/tc_number_tools.rb +0 -0
  166. data/test/utils/content_generator.rb +226 -0
  167. metadata +262 -221
  168. data/ext/inc/lang.h +0 -48
  169. data/ext/inc/threading.h +0 -31
  170. data/ext/stem_ISO_8859_1_english.c +0 -1156
  171. data/ext/stem_ISO_8859_1_french.c +0 -1276
  172. data/ext/stem_ISO_8859_1_italian.c +0 -1091
  173. data/ext/stem_ISO_8859_1_norwegian.c +0 -296
  174. data/ext/stem_ISO_8859_1_spanish.c +0 -1119
  175. data/ext/stem_ISO_8859_1_swedish.c +0 -307
  176. data/ext/stem_UTF_8_danish.c +0 -344
  177. data/ext/stem_UTF_8_english.c +0 -1176
  178. data/ext/stem_UTF_8_french.c +0 -1296
  179. data/ext/stem_UTF_8_italian.c +0 -1113
  180. data/ext/stem_UTF_8_norwegian.c +0 -302
  181. data/ext/stem_UTF_8_portuguese.c +0 -1055
  182. data/ext/stem_UTF_8_russian.c +0 -709
  183. data/ext/stem_UTF_8_spanish.c +0 -1137
  184. data/ext/stem_UTF_8_swedish.c +0 -313
  185. data/lib/ferret_version.rb +0 -3
@@ -1,35 +1,40 @@
1
1
  #ifndef FRT_SEARCH_H
2
2
  #define FRT_SEARCH_H
3
3
 
4
- typedef struct Query Query;
5
- typedef struct Weight Weight;
6
- typedef struct Scorer Scorer;
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ typedef struct FrtQuery FrtQuery;
9
+ typedef struct FrtWeight FrtWeight;
10
+ typedef struct FrtScorer FrtScorer;
7
11
 
8
12
  #include "index.h"
9
13
  #include "bitvector.h"
10
14
  #include "similarity.h"
15
+ #include "field_index.h"
11
16
 
12
17
  /***************************************************************************
13
18
  *
14
- * Explanation
19
+ * FrtExplanation
15
20
  *
16
21
  ***************************************************************************/
17
22
 
18
- #define EXPLANATION_DETAILS_START_SIZE 4
19
- typedef struct Explanation
23
+ #define FRT_EXPLANATION_DETAILS_START_SIZE 4
24
+ typedef struct FrtExplanation
20
25
  {
21
26
  float value;
22
27
  char *description;
23
- struct Explanation **details;
24
- } Explanation;
25
-
26
- extern Explanation *expl_new(float value, const char *description, ...);
27
- extern void expl_destroy(Explanation *expl);
28
- extern Explanation *expl_add_detail(Explanation *expl, Explanation *detail);
29
- extern char *expl_to_s_depth(Explanation *expl, int depth);
30
- extern char *expl_to_html(Explanation *expl);
28
+ struct FrtExplanation **details;
29
+ } FrtExplanation;
30
+
31
+ extern FrtExplanation *frt_expl_new(float value, const char *description, ...);
32
+ extern void frt_expl_destroy(FrtExplanation *expl);
33
+ extern FrtExplanation *frt_expl_add_detail(FrtExplanation *expl, FrtExplanation *detail);
34
+ extern char *frt_expl_to_s_depth(FrtExplanation *expl, int depth);
35
+ extern char *frt_expl_to_html(FrtExplanation *expl);
31
36
 
32
- #define expl_to_s(expl) expl_to_s_depth(expl, 0)
37
+ #define frt_expl_to_s(expl) frt_expl_to_s_depth(expl, 0)
33
38
 
34
39
  /***************************************************************************
35
40
  *
@@ -37,85 +42,86 @@ extern char *expl_to_html(Explanation *expl);
37
42
  *
38
43
  ***************************************************************************/
39
44
 
40
- typedef struct MatchRange
45
+ typedef struct FrtMatchRange
41
46
  {
42
47
  int start;
43
48
  int end;
44
49
  int start_offset;
45
50
  int end_offset;
46
51
  double score;
47
- } MatchRange;
52
+ } FrtMatchRange;
48
53
 
49
- #define MATCH_VECTOR_INIT_CAPA 8
50
- typedef struct MatchVector
54
+ #define FRT_MATCH_VECTOR_INIT_CAPA 8
55
+ typedef struct FrtMatchVector
51
56
  {
52
57
  int size;
53
58
  int capa;
54
- MatchRange *matches;
55
- } MatchVector;
59
+ FrtMatchRange *matches;
60
+ } FrtMatchVector;
56
61
 
57
- extern MatchVector *matchv_new();
58
- extern MatchVector *matchv_add(MatchVector *mp, int start, int end);
59
- extern MatchVector *matchv_sort(MatchVector *self);
60
- extern void matchv_destroy(MatchVector *self);
61
- extern MatchVector *matchv_compact(MatchVector *self);
62
- extern MatchVector *matchv_compact_with_breaks(MatchVector *self);
62
+ extern FrtMatchVector *frt_matchv_new();
63
+ extern FrtMatchVector *frt_matchv_add(FrtMatchVector *mp, int start, int end);
64
+ extern FrtMatchVector *frt_matchv_sort(FrtMatchVector *self);
65
+ extern void frt_matchv_destroy(FrtMatchVector *self);
66
+ extern FrtMatchVector *frt_matchv_compact(FrtMatchVector *self);
67
+ extern FrtMatchVector *frt_matchv_compact_with_breaks(FrtMatchVector *self);
63
68
 
64
69
  /***************************************************************************
65
70
  *
66
- * Hit
71
+ * FrtHit
67
72
  *
68
73
  ***************************************************************************/
69
74
 
70
- typedef struct Hit
75
+ typedef struct FrtHit
71
76
  {
72
77
  int doc;
73
78
  float score;
74
- } Hit;
79
+ } FrtHit;
75
80
 
76
81
  /***************************************************************************
77
82
  *
78
- * TopDocs
83
+ * FrtTopDocs
79
84
  *
80
85
  ***************************************************************************/
81
86
 
82
- typedef struct TopDocs
87
+ typedef struct FrtTopDocs
83
88
  {
84
89
  int total_hits;
85
90
  int size;
86
- Hit **hits;
91
+ FrtHit **hits;
87
92
  float max_score;
88
- } TopDocs;
93
+ } FrtTopDocs;
89
94
 
90
- extern TopDocs *td_new(int total_hits, int size, Hit **hits, float max_score);
91
- extern void td_destroy(TopDocs *td);
92
- extern char *td_to_s(TopDocs *td);
95
+ extern FrtTopDocs *frt_td_new(int total_hits, int size, FrtHit **hits,
96
+ float max_score);
97
+ extern void frt_td_destroy(FrtTopDocs *td);
98
+ extern char *frt_td_to_s(FrtTopDocs *td);
93
99
 
94
100
  /***************************************************************************
95
101
  *
96
- * Filter
102
+ * FrtFilter
97
103
  *
98
104
  ***************************************************************************/
99
105
 
100
- typedef struct Filter
106
+ typedef struct FrtFilter
101
107
  {
102
- char *name;
103
- HashTable *cache;
104
- BitVector *(*get_bv_i)(struct Filter *self, IndexReader *ir);
105
- char *(*to_s)(struct Filter *self);
106
- unsigned long (*hash)(struct Filter *self);
107
- int (*eq)(struct Filter *self, struct Filter *o);
108
- void (*destroy_i)(struct Filter *self);
109
- int ref_cnt;
110
- } Filter;
108
+ FrtSymbol name;
109
+ FrtHash *cache;
110
+ FrtBitVector *(*get_bv_i)(struct FrtFilter *self, FrtIndexReader *ir);
111
+ char *(*to_s)(struct FrtFilter *self);
112
+ unsigned long (*hash)(struct FrtFilter *self);
113
+ int (*eq)(struct FrtFilter *self, struct FrtFilter *o);
114
+ void (*destroy_i)(struct FrtFilter *self);
115
+ int ref_cnt;
116
+ } FrtFilter;
111
117
 
112
- #define filt_new(type) filt_create(sizeof(type), #type)
113
- extern Filter *filt_create(size_t size, const char *name);
114
- extern BitVector *filt_get_bv(Filter *filt, IndexReader *ir);
115
- extern void filt_destroy_i(Filter *filt);
116
- extern void filt_deref(Filter *filt);
117
- extern unsigned long filt_hash(Filter *filt);
118
- extern int filt_eq(Filter *filt, Filter *o);
118
+ #define filt_new(type) frt_filt_create(sizeof(type), frt_intern(#type))
119
+ extern FrtFilter *frt_filt_create(size_t size, FrtSymbol name);
120
+ extern FrtBitVector *frt_filt_get_bv(FrtFilter *filt, FrtIndexReader *ir);
121
+ extern void frt_filt_destroy_i(FrtFilter *filt);
122
+ extern void frt_filt_deref(FrtFilter *filt);
123
+ extern unsigned long frt_filt_hash(FrtFilter *filt);
124
+ extern int frt_filt_eq(FrtFilter *filt, FrtFilter *o);
119
125
 
120
126
  /***************************************************************************
121
127
  *
@@ -123,679 +129,725 @@ extern int filt_eq(Filter *filt, Filter *o);
123
129
  *
124
130
  ***************************************************************************/
125
131
 
126
- extern Filter *rfilt_new(const char *field,
132
+ extern FrtFilter *frt_rfilt_new(FrtSymbol field,
127
133
  const char *lower_term, const char *upper_term,
128
134
  bool include_lower, bool include_upper);
129
135
 
136
+ /***************************************************************************
137
+ *
138
+ * TypedRangeFilter
139
+ *
140
+ ***************************************************************************/
141
+
142
+ extern FrtFilter *frt_trfilt_new(FrtSymbol field,
143
+ const char *lower_term, const char *upper_term,
144
+ bool include_lower, bool include_upper);
145
+
130
146
  /***************************************************************************
131
147
  *
132
148
  * QueryFilter
133
149
  *
134
150
  ***************************************************************************/
135
151
 
136
- extern Filter *qfilt_new(Query *query);
137
- extern Filter *qfilt_new_nr(Query *query);
152
+ extern FrtFilter *frt_qfilt_new(FrtQuery *query);
153
+ extern FrtFilter *frt_qfilt_new_nr(FrtQuery *query);
138
154
 
139
155
  /***************************************************************************
140
156
  *
141
- * Weight
157
+ * FrtWeight
142
158
  *
143
159
  ***************************************************************************/
144
160
 
145
- struct Weight
161
+ struct FrtWeight
146
162
  {
147
163
  float value;
148
164
  float qweight;
149
165
  float qnorm;
150
166
  float idf;
151
- Query *query;
152
- Similarity *similarity;
153
- Query *(*get_query)(Weight *self);
154
- float (*get_value)(Weight *self);
155
- void (*normalize)(Weight *self, float normalization_factor);
156
- Scorer *(*scorer)(Weight *self, IndexReader *ir);
157
- Explanation *(*explain)(Weight *self, IndexReader *ir, int doc_num);
158
- float (*sum_of_squared_weights)(Weight *self);
159
- char *(*to_s)(Weight *self);
160
- void (*destroy)(Weight *self);
167
+ FrtQuery *query;
168
+ FrtSimilarity *similarity;
169
+ FrtQuery *(*get_query)(FrtWeight *self);
170
+ float (*get_value)(FrtWeight *self);
171
+ void (*normalize)(FrtWeight *self, float normalization_factor);
172
+ FrtScorer *(*scorer)(FrtWeight *self, FrtIndexReader *ir);
173
+ FrtExplanation *(*explain)(FrtWeight *self, FrtIndexReader *ir, int doc_num);
174
+ float (*sum_of_squared_weights)(FrtWeight *self);
175
+ char *(*to_s)(FrtWeight *self);
176
+ void (*destroy)(FrtWeight *self);
161
177
  };
162
178
 
163
- #define w_new(type, query) w_create(sizeof(type), query)
164
- extern Weight *w_create(size_t size, Query *query);
165
- extern void w_destroy(Weight *self);
166
- extern Query *w_get_query(Weight *self);
167
- extern float w_get_value(Weight *self);
168
- extern float w_sum_of_squared_weights(Weight *self);
169
- extern void w_normalize(Weight *self, float normalization_factor);
179
+ #define w_new(type, query) frt_w_create(sizeof(type), query)
180
+ extern FrtWeight *frt_w_create(size_t size, FrtQuery *query);
181
+ extern void frt_w_destroy(FrtWeight *self);
182
+ extern FrtQuery *frt_w_get_query(FrtWeight *self);
183
+ extern float frt_w_get_value(FrtWeight *self);
184
+ extern float frt_w_sum_of_squared_weights(FrtWeight *self);
185
+ extern void frt_w_normalize(FrtWeight *self, float normalization_factor);
170
186
 
171
187
  /***************************************************************************
172
188
  *
173
- * Query
189
+ * FrtQuery
174
190
  *
175
191
  ***************************************************************************/
176
192
 
177
- enum QUERY_TYPE
193
+ typedef enum
194
+ {
195
+ FRT_TERM_QUERY,
196
+ FRT_MULTI_TERM_QUERY,
197
+ FRT_BOOLEAN_QUERY,
198
+ FRT_PHRASE_QUERY,
199
+ FRT_CONSTANT_QUERY,
200
+ FRT_FILTERED_QUERY,
201
+ FRT_MATCH_ALL_QUERY,
202
+ FRT_RANGE_QUERY,
203
+ FRT_TYPED_RANGE_QUERY,
204
+ FRT_WILD_CARD_QUERY,
205
+ FRT_FUZZY_QUERY,
206
+ FRT_PREFIX_QUERY,
207
+ FRT_SPAN_TERM_QUERY,
208
+ FRT_SPAN_MULTI_TERM_QUERY,
209
+ FRT_SPAN_PREFIX_QUERY,
210
+ FRT_SPAN_FIRST_QUERY,
211
+ FRT_SPAN_OR_QUERY,
212
+ FRT_SPAN_NOT_QUERY,
213
+ FRT_SPAN_NEAR_QUERY
214
+ } FrtQueryType;
215
+
216
+ struct FrtQuery
178
217
  {
179
- TERM_QUERY,
180
- MULTI_TERM_QUERY,
181
- BOOLEAN_QUERY,
182
- PHRASE_QUERY,
183
- CONSTANT_QUERY,
184
- FILTERED_QUERY,
185
- MATCH_ALL_QUERY,
186
- RANGE_QUERY,
187
- WILD_CARD_QUERY,
188
- FUZZY_QUERY,
189
- PREFIX_QUERY,
190
- SPAN_TERM_QUERY,
191
- SPAN_MULTI_TERM_QUERY,
192
- SPAN_PREFIX_QUERY,
193
- SPAN_FIRST_QUERY,
194
- SPAN_OR_QUERY,
195
- SPAN_NOT_QUERY,
196
- SPAN_NEAR_QUERY
197
- };
198
-
199
- struct Query
200
- {
201
- int ref_cnt;
202
- float boost;
203
- Weight *weight;
204
- Query *(*rewrite)(Query *self, IndexReader *ir);
205
- void (*extract_terms)(Query *self, HashSet *terms);
206
- Similarity *(*get_similarity)(Query *self, Searcher *searcher);
207
- char *(*to_s)(Query *self, const char *field);
208
- unsigned long (*hash)(Query *self);
209
- int (*eq)(Query *self, Query *o);
210
- void (*destroy_i)(Query *self);
211
- Weight *(*create_weight_i)(Query *self, Searcher *searcher);
212
- MatchVector *(*get_matchv_i)(Query *self, MatchVector *mv, TermVector *tv);
213
- enum QUERY_TYPE type;
218
+ int ref_cnt;
219
+ float boost;
220
+ FrtWeight *weight;
221
+ FrtQuery *(*rewrite)(FrtQuery *self, FrtIndexReader *ir);
222
+ void (*extract_terms)(FrtQuery *self, FrtHashSet *terms);
223
+ FrtSimilarity *(*get_similarity)(FrtQuery *self, FrtSearcher *searcher);
224
+ char *(*to_s)(FrtQuery *self, FrtSymbol field);
225
+ unsigned long (*hash)(FrtQuery *self);
226
+ int (*eq)(FrtQuery *self, FrtQuery *o);
227
+ void (*destroy_i)(FrtQuery *self);
228
+ FrtWeight *(*create_weight_i)(FrtQuery *self, FrtSearcher *searcher);
229
+ FrtMatchVector *(*get_matchv_i)(FrtQuery *self, FrtMatchVector *mv, FrtTermVector *tv);
230
+ FrtQueryType type;
214
231
  };
215
232
 
216
- /* Internal Query Functions */
217
- extern Similarity *q_get_similarity_i(Query *self, Searcher *searcher);
218
- extern void q_destroy_i(Query *self);
219
- extern Weight *q_create_weight_unsup(Query *self, Searcher *searcher);
233
+ /* Internal FrtQuery Functions */
234
+ extern FrtSimilarity *frt_q_get_similarity_i(FrtQuery *self, FrtSearcher *searcher);
235
+ extern void frt_q_destroy_i(FrtQuery *self);
236
+ extern FrtWeight *frt_q_create_weight_unsup(FrtQuery *self, FrtSearcher *searcher);
220
237
 
221
- extern void q_deref(Query *self);
222
- extern const char *q_get_query_name(enum QUERY_TYPE type);
223
- extern Weight *q_weight(Query *self, Searcher *searcher);
224
- extern Query *q_combine(Query **queries, int q_cnt);
225
- extern unsigned long q_hash(Query *self);
226
- extern int q_eq(Query *self, Query *o);
227
- extern Query *q_create(size_t size);
228
- #define q_new(type) q_create(sizeof(type))
238
+ extern void frt_q_deref(FrtQuery *self);
239
+ extern const char *frt_q_get_query_name(FrtQueryType type);
240
+ extern FrtWeight *frt_q_weight(FrtQuery *self, FrtSearcher *searcher);
241
+ extern FrtQuery *frt_q_combine(FrtQuery **queries, int q_cnt);
242
+ extern unsigned long frt_q_hash(FrtQuery *self);
243
+ extern int frt_q_eq(FrtQuery *self, FrtQuery *o);
244
+ extern FrtQuery *frt_q_create(size_t size);
245
+ #define frt_q_new(type) frt_q_create(sizeof(type))
229
246
 
230
247
  /***************************************************************************
231
- * TermQuery
248
+ * FrtTermQuery
232
249
  ***************************************************************************/
233
250
 
234
- typedef struct TermQuery
251
+ typedef struct FrtTermQuery
235
252
  {
236
- Query super;
237
- char *field;
238
- char *term;
239
- } TermQuery;
253
+ FrtQuery super;
254
+ FrtSymbol field;
255
+ char *term;
256
+ } FrtTermQuery;
240
257
 
241
- Query *tq_new(const char *field, const char *term);
258
+ FrtQuery *frt_tq_new(FrtSymbol field, const char *term);
242
259
 
243
260
  /***************************************************************************
244
- * BooleanQuery
261
+ * FrtBooleanQuery
245
262
  ***************************************************************************/
246
263
 
247
- /* *** BooleanClause *** */
264
+ /* *** FrtBooleanClause *** */
248
265
 
249
- enum BC_TYPE
266
+ typedef enum
250
267
  {
251
- BC_SHOULD,
252
- BC_MUST,
253
- BC_MUST_NOT
254
- };
268
+ FRT_BC_SHOULD,
269
+ FRT_BC_MUST,
270
+ FRT_BC_MUST_NOT
271
+ } FrtBCType;
255
272
 
256
- typedef struct BooleanClause
273
+ typedef struct FrtBooleanClause
257
274
  {
258
275
  int ref_cnt;
259
- Query *query;
260
- unsigned int occur : 4;
276
+ FrtQuery *query;
277
+ FrtBCType occur;
261
278
  bool is_prohibited : 1;
262
279
  bool is_required : 1;
263
- } BooleanClause;
280
+ } FrtBooleanClause;
264
281
 
265
- extern BooleanClause *bc_new(Query *query, enum BC_TYPE occur);
266
- extern void bc_deref(BooleanClause *self);
267
- extern void bc_set_occur(BooleanClause *self, enum BC_TYPE occur);
282
+ extern FrtBooleanClause *frt_bc_new(FrtQuery *query, FrtBCType occur);
283
+ extern void frt_bc_deref(FrtBooleanClause *self);
284
+ extern void frt_bc_set_occur(FrtBooleanClause *self, FrtBCType occur);
268
285
 
269
- /* *** BooleanQuery *** */
286
+ /* *** FrtBooleanQuery *** */
270
287
 
271
- #define DEFAULT_MAX_CLAUSE_COUNT 1024
272
- #define BOOLEAN_CLAUSES_START_CAPA 4
273
- #define QUERY_STRING_START_SIZE 64
288
+ #define FRT_DEFAULT_MAX_CLAUSE_COUNT 1024
289
+ #define FRT_BOOLEAN_CLAUSES_START_CAPA 4
290
+ #define FRT_QUERY_STRING_START_SIZE 64
274
291
 
275
- typedef struct BooleanQuery
292
+ typedef struct FrtBooleanQuery
276
293
  {
277
- Query super;
294
+ FrtQuery super;
278
295
  bool coord_disabled;
279
296
  int max_clause_cnt;
280
297
  int clause_cnt;
281
298
  int clause_capa;
282
299
  float original_boost;
283
- BooleanClause **clauses;
284
- Similarity *similarity;
285
- } BooleanQuery;
300
+ FrtBooleanClause **clauses;
301
+ FrtSimilarity *similarity;
302
+ } FrtBooleanQuery;
286
303
 
287
- extern Query *bq_new(bool coord_disabled);
288
- extern Query *bq_new_max(bool coord_disabled, int max);
289
- extern BooleanClause *bq_add_query(Query *self, Query *sub_query,
290
- enum BC_TYPE occur);
291
- extern BooleanClause *bq_add_query_nr(Query *self, Query *sub_query,
292
- enum BC_TYPE occur);
293
- extern BooleanClause *bq_add_clause(Query *self, BooleanClause *bc);
294
- extern BooleanClause *bq_add_clause_nr(Query *self, BooleanClause *bc);
304
+ extern FrtQuery *frt_bq_new(bool coord_disabled);
305
+ extern FrtQuery *frt_bq_new_max(bool coord_disabled, int max);
306
+ extern FrtBooleanClause *frt_bq_add_query(FrtQuery *self, FrtQuery *sub_query,
307
+ FrtBCType occur);
308
+ extern FrtBooleanClause *frt_bq_add_query_nr(FrtQuery *self, FrtQuery *sub_query,
309
+ FrtBCType occur);
310
+ extern FrtBooleanClause *frt_bq_add_clause(FrtQuery *self, FrtBooleanClause *bc);
311
+ extern FrtBooleanClause *frt_bq_add_clause_nr(FrtQuery *self, FrtBooleanClause *bc);
295
312
 
296
313
  /***************************************************************************
297
- * PhraseQuery
314
+ * FrtPhraseQuery
298
315
  ***************************************************************************/
299
316
 
300
- #define PHQ_INIT_CAPA 4
301
- typedef struct PhraseQuery
317
+ #define FRT_PHQ_INIT_CAPA 4
318
+ typedef struct FrtPhraseQuery
302
319
  {
303
- Query super;
304
- int slop;
305
- char *field;
306
- PhrasePosition *positions;
307
- int pos_cnt;
308
- int pos_capa;
309
- } PhraseQuery;
320
+ FrtQuery super;
321
+ int slop;
322
+ FrtSymbol field;
323
+ FrtPhrasePosition *positions;
324
+ int pos_cnt;
325
+ int pos_capa;
326
+ } FrtPhraseQuery;
310
327
 
311
- extern Query *phq_new(const char *field);
312
- extern void phq_add_term(Query *self, const char *term, int pos_inc);
313
- extern void phq_add_term_abs(Query *self, const char *term, int position);
314
- extern void phq_append_multi_term(Query *self, const char *term);
328
+ extern FrtQuery *frt_phq_new(FrtSymbol field);
329
+ extern void frt_phq_add_term(FrtQuery *self, const char *term, int pos_inc);
330
+ extern void frt_phq_add_term_abs(FrtQuery *self, const char *term, int position);
331
+ extern void frt_phq_append_multi_term(FrtQuery *self, const char *term);
332
+ extern void frt_phq_set_slop(FrtQuery *self, int slop);
315
333
 
316
334
  /***************************************************************************
317
- * MultiTermQuery
335
+ * FrtMultiTermQuery
318
336
  ***************************************************************************/
319
337
 
320
- #define MULTI_TERM_QUERY_MAX_TERMS 256
321
- typedef struct MultiTermQuery
338
+ #define FRT_MULTI_TERM_QUERY_MAX_TERMS 256
339
+ typedef struct FrtMultiTermQuery
322
340
  {
323
- Query super;
324
- char *field;
325
- PriorityQueue *boosted_terms;
326
- float min_boost;
327
- } MultiTermQuery;
341
+ FrtQuery super;
342
+ FrtSymbol field;
343
+ FrtPriorityQueue *boosted_terms;
344
+ float min_boost;
345
+ } FrtMultiTermQuery;
328
346
 
329
- extern void multi_tq_add_term(Query *self, const char *term);
330
- extern void multi_tq_add_term_boost(Query *self, const char *term, float boost);
331
- extern Query *multi_tq_new(const char *field);
332
- extern Query *multi_tq_new_conf(const char *field, int max_terms,
347
+ extern void frt_multi_tq_add_term(FrtQuery *self, const char *term);
348
+ extern void frt_multi_tq_add_term_boost(FrtQuery *self, const char *term, float boost);
349
+ extern FrtQuery *frt_multi_tq_new(FrtSymbol field);
350
+ extern FrtQuery *frt_multi_tq_new_conf(FrtSymbol field, int max_terms,
333
351
  float min_boost);
334
352
 
335
- #define MTQMaxTerms(query) (((MTQSubQuery *)(query))->max_terms)
336
- typedef struct MTQSubQuery
353
+ #define FrtMTQMaxTerms(query) (((FrtMTQSubQuery *)(query))->max_terms)
354
+ typedef struct FrtMTQSubQuery
337
355
  {
338
- Query super;
356
+ FrtQuery super;
339
357
  int max_terms;
340
- } MTQSubQuery;
358
+ } FrtMTQSubQuery;
341
359
 
342
360
  /***************************************************************************
343
- * PrefixQuery
361
+ * FrtPrefixQuery
344
362
  ***************************************************************************/
345
363
 
346
- #define PREFIX_QUERY_MAX_TERMS 256
364
+ #define FRT_PREFIX_QUERY_MAX_TERMS 256
347
365
 
348
- typedef struct PrefixQuery
366
+ typedef struct FrtPrefixQuery
349
367
  {
350
- MTQSubQuery super;
351
- char *field;
352
- char *prefix;
353
- } PrefixQuery;
368
+ FrtMTQSubQuery super;
369
+ FrtSymbol field;
370
+ char *prefix;
371
+ } FrtPrefixQuery;
354
372
 
355
- extern Query *prefixq_new(const char *field, const char *prefix);
373
+ extern FrtQuery *frt_prefixq_new(FrtSymbol field, const char *prefix);
356
374
 
357
375
  /***************************************************************************
358
- * WildCardQuery
376
+ * FrtWildCardQuery
359
377
  ***************************************************************************/
360
378
 
361
- #define WILD_CHAR '?'
362
- #define WILD_STRING '*'
363
- #define WILD_CARD_QUERY_MAX_TERMS 256
379
+ #define FRT_WILD_CHAR '?'
380
+ #define FRT_WILD_STRING '*'
381
+ #define FRT_WILD_CARD_QUERY_MAX_TERMS 256
364
382
 
365
- typedef struct WildCardQuery
383
+ typedef struct FrtWildCardQuery
366
384
  {
367
- MTQSubQuery super;
368
- char *field;
369
- char *pattern;
370
- } WildCardQuery;
385
+ FrtMTQSubQuery super;
386
+ FrtSymbol field;
387
+ char *pattern;
388
+ } FrtWildCardQuery;
371
389
 
372
390
 
373
- extern Query *wcq_new(const char *field, const char *pattern);
374
- extern bool wc_match(const char *pattern, const char *text);
391
+ extern FrtQuery *frt_wcq_new(FrtSymbol field, const char *pattern);
392
+ extern bool frt_wc_match(const char *pattern, const char *text);
375
393
 
376
394
  /***************************************************************************
377
- * FuzzyQuery
395
+ * FrtFuzzyQuery
378
396
  ***************************************************************************/
379
397
 
380
- #define DEF_MIN_SIM 0.5f
381
- #define DEF_PRE_LEN 0
382
- #define DEF_MAX_TERMS 256
383
- #define TYPICAL_LONGEST_WORD 20
398
+ #define FRT_DEF_MIN_SIM 0.5f
399
+ #define FRT_DEF_PRE_LEN 0
400
+ #define FRT_DEF_MAX_TERMS 256
401
+ #define FRT_TYPICAL_LONGEST_WORD 20
384
402
 
385
- typedef struct FuzzyQuery
403
+ typedef struct FrtFuzzyQuery
386
404
  {
387
- MTQSubQuery super;
388
- char *field;
405
+ FrtMTQSubQuery super;
406
+ FrtSymbol field;
389
407
  char *term;
390
408
  const char *text; /* term text after prefix */
391
409
  int text_len;
392
410
  int pre_len;
393
411
  float min_sim;
394
412
  float scale_factor;
395
- int max_distances[TYPICAL_LONGEST_WORD];
413
+ int max_distances[FRT_TYPICAL_LONGEST_WORD];
396
414
  int *da;
397
- } FuzzyQuery;
415
+ } FrtFuzzyQuery;
398
416
 
399
- extern Query *fuzq_new(const char *term, const char *field);
400
- extern Query *fuzq_new_conf(const char *field, const char *term,
417
+ extern FrtQuery *frt_fuzq_new(FrtSymbol field, const char *term);
418
+ extern FrtQuery *frt_fuzq_new_conf(FrtSymbol field, const char *term,
401
419
  float min_sim, int pre_len, int max_terms);
420
+ extern float frt_fuzq_score(FrtFuzzyQuery *fuzq, const char *target);
402
421
 
403
422
  /***************************************************************************
404
- * ConstantScoreQuery
423
+ * FrtConstantScoreQuery
405
424
  ***************************************************************************/
406
425
 
407
- typedef struct ConstantScoreQuery
426
+ typedef struct FrtConstantScoreQuery
408
427
  {
409
- Query super;
410
- Filter *filter;
411
- Query *original;
412
- } ConstantScoreQuery;
428
+ FrtQuery super;
429
+ FrtFilter *filter;
430
+ FrtQuery *original;
431
+ } FrtConstantScoreQuery;
413
432
 
414
- extern Query *csq_new(Filter *filter);
415
- extern Query *csq_new_nr(Filter *filter);
433
+ extern FrtQuery *frt_csq_new(FrtFilter *filter);
434
+ extern FrtQuery *frt_csq_new_nr(FrtFilter *filter);
416
435
 
417
436
  /***************************************************************************
418
- * FilteredQuery
437
+ * FrtFilteredQuery
419
438
  ***************************************************************************/
420
439
 
421
- typedef struct FilteredQuery
440
+ typedef struct FrtFilteredQuery
422
441
  {
423
- Query super;
424
- Query *query;
425
- Filter *filter;
426
- } FilteredQuery;
442
+ FrtQuery super;
443
+ FrtQuery *query;
444
+ FrtFilter *filter;
445
+ } FrtFilteredQuery;
427
446
 
428
- extern Query *fq_new(Query *query, Filter *filter);
447
+ extern FrtQuery *frt_fq_new(FrtQuery *query, FrtFilter *filter);
429
448
 
430
449
  /***************************************************************************
431
- * MatchAllQuery
450
+ * FrtMatchAllQuery
432
451
  ***************************************************************************/
433
452
 
434
- extern Query *maq_new();
453
+ extern FrtQuery *frt_maq_new();
435
454
 
436
455
  /***************************************************************************
437
- * RangeQuery
456
+ * FrtRangeQuery
438
457
  ***************************************************************************/
439
458
 
440
- extern Query *rq_new(const char *field, const char *lower_term,
459
+ extern FrtQuery *frt_rq_new(FrtSymbol field, const char *lower_term,
441
460
  const char *upper_term, bool include_lower,
442
461
  bool include_upper);
443
- extern Query *rq_new_less(const char *field, const char *upper_term,
462
+ extern FrtQuery *frt_rq_new_less(FrtSymbol field, const char *upper_term,
444
463
  bool include_upper);
445
- extern Query *rq_new_more(const char *field, const char *lower_term,
464
+ extern FrtQuery *frt_rq_new_more(FrtSymbol field, const char *lower_term,
446
465
  bool include_lower);
447
466
 
448
467
  /***************************************************************************
449
- * SpanQuery
468
+ * FrtTypedRangeQuery
469
+ ***************************************************************************/
470
+
471
+ extern FrtQuery *frt_trq_new(FrtSymbol field, const char *lower_term,
472
+ const char *upper_term, bool include_lower,
473
+ bool include_upper);
474
+ extern FrtQuery *frt_trq_new_less(FrtSymbol field, const char *upper_term,
475
+ bool include_upper);
476
+ extern FrtQuery *frt_trq_new_more(FrtSymbol field, const char *lower_term,
477
+ bool include_lower);
478
+
479
+ /***************************************************************************
480
+ * FrtSpanQuery
450
481
  ***************************************************************************/
451
482
 
452
- /* ** SpanEnum ** */
453
- typedef struct SpanEnum SpanEnum;
454
- struct SpanEnum
483
+ /* ** FrtSpanEnum ** */
484
+ typedef struct FrtSpanEnum FrtSpanEnum;
485
+ struct FrtSpanEnum
455
486
  {
456
- Query *query;
457
- bool (*next)(SpanEnum *self);
458
- bool (*skip_to)(SpanEnum *self, int target_doc);
459
- int (*doc)(SpanEnum *self);
460
- int (*start)(SpanEnum *self);
461
- int (*end)(SpanEnum *self);
462
- char *(*to_s)(SpanEnum *self);
463
- void (*destroy)(SpanEnum *self);
487
+ FrtQuery *query;
488
+ bool (*next)(FrtSpanEnum *self);
489
+ bool (*skip_to)(FrtSpanEnum *self, int target_doc);
490
+ int (*doc)(FrtSpanEnum *self);
491
+ int (*start)(FrtSpanEnum *self);
492
+ int (*end)(FrtSpanEnum *self);
493
+ char *(*to_s)(FrtSpanEnum *self);
494
+ void (*destroy)(FrtSpanEnum *self);
464
495
  };
465
496
 
466
- /* ** SpanQuery ** */
467
- typedef struct SpanQuery
497
+ /* ** FrtSpanQuery ** */
498
+ typedef struct FrtSpanQuery
468
499
  {
469
- Query super;
470
- char *field;
471
- SpanEnum *(*get_spans)(Query *self, IndexReader *ir);
472
- HashSet *(*get_terms)(Query *self);
473
- } SpanQuery;
500
+ FrtQuery super;
501
+ FrtSymbol field;
502
+ FrtSpanEnum *(*get_spans)(FrtQuery *self, FrtIndexReader *ir);
503
+ FrtHashSet *(*get_terms)(FrtQuery *self);
504
+ } FrtSpanQuery;
474
505
 
475
506
  /***************************************************************************
476
- * SpanTermQuery
507
+ * FrtSpanTermQuery
477
508
  ***************************************************************************/
478
509
 
479
- typedef struct SpanTermQuery
510
+ typedef struct FrtSpanTermQuery
480
511
  {
481
- SpanQuery super;
512
+ FrtSpanQuery super;
482
513
  char *term;
483
- } SpanTermQuery;
484
- extern Query *spantq_new(const char *field, const char *term);
514
+ } FrtSpanTermQuery;
515
+ extern FrtQuery *frt_spantq_new(FrtSymbol field, const char *term);
485
516
 
486
517
  /***************************************************************************
487
- * SpanMultiTermQuery
518
+ * FrtSpanMultiTermQuery
488
519
  ***************************************************************************/
489
520
 
490
- #define SPAN_MULTI_TERM_QUERY_CAPA 1024
491
- typedef struct SpanMultiTermQuery
521
+ #define FRT_SPAN_MULTI_TERM_QUERY_CAPA 1024
522
+ typedef struct FrtSpanMultiTermQuery
492
523
  {
493
- SpanQuery super;
524
+ FrtSpanQuery super;
494
525
  char **terms;
495
526
  int term_cnt;
496
527
  int term_capa;
497
- } SpanMultiTermQuery;
528
+ } FrtSpanMultiTermQuery;
498
529
 
499
- extern Query *spanmtq_new(const char *field);
500
- extern Query *spanmtq_new_conf(const char *field, int max_size);
501
- extern void spanmtq_add_term(Query *self, const char *term);
530
+ extern FrtQuery *frt_spanmtq_new(FrtSymbol field);
531
+ extern FrtQuery *frt_spanmtq_new_conf(FrtSymbol field, int max_size);
532
+ extern void frt_spanmtq_add_term(FrtQuery *self, const char *term);
502
533
 
503
534
  /***************************************************************************
504
- * SpanFirstQuery
535
+ * FrtSpanFirstQuery
505
536
  ***************************************************************************/
506
537
 
507
- typedef struct SpanFirstQuery
538
+ typedef struct FrtSpanFirstQuery
508
539
  {
509
- SpanQuery super;
540
+ FrtSpanQuery super;
510
541
  int end;
511
- Query *match;
512
- } SpanFirstQuery;
542
+ FrtQuery *match;
543
+ } FrtSpanFirstQuery;
513
544
 
514
- extern Query *spanfq_new(Query *match, int end);
515
- extern Query *spanfq_new_nr(Query *match, int end);
545
+ extern FrtQuery *frt_spanfq_new(FrtQuery *match, int end);
546
+ extern FrtQuery *frt_spanfq_new_nr(FrtQuery *match, int end);
516
547
 
517
548
  /***************************************************************************
518
- * SpanOrQuery
549
+ * FrtSpanOrQuery
519
550
  ***************************************************************************/
520
551
 
521
- typedef struct SpanOrQuery
552
+ typedef struct FrtSpanOrQuery
522
553
  {
523
- SpanQuery super;
524
- Query **clauses;
554
+ FrtSpanQuery super;
555
+ FrtQuery **clauses;
525
556
  int c_cnt;
526
557
  int c_capa;
527
- } SpanOrQuery;
558
+ } FrtSpanOrQuery;
528
559
 
529
- extern Query *spanoq_new();
530
- extern Query *spanoq_add_clause(Query *self, Query *clause);
531
- extern Query *spanoq_add_clause_nr(Query *self, Query *clause);
560
+ extern FrtQuery *frt_spanoq_new();
561
+ extern FrtQuery *frt_spanoq_add_clause(FrtQuery *self, FrtQuery *clause);
562
+ extern FrtQuery *frt_spanoq_add_clause_nr(FrtQuery *self, FrtQuery *clause);
532
563
 
533
564
  /***************************************************************************
534
- * SpanNearQuery
565
+ * FrtSpanNearQuery
535
566
  ***************************************************************************/
536
567
 
537
- typedef struct SpanNearQuery
568
+ typedef struct FrtSpanNearQuery
538
569
  {
539
- SpanQuery super;
540
- Query **clauses;
570
+ FrtSpanQuery super;
571
+ FrtQuery **clauses;
541
572
  int c_cnt;
542
573
  int c_capa;
543
574
  int slop;
544
575
  bool in_order : 1;
545
- } SpanNearQuery;
576
+ } FrtSpanNearQuery;
546
577
 
547
- extern Query *spannq_new(int slop, bool in_order);
548
- extern Query *spannq_add_clause(Query *self, Query *clause);
549
- extern Query *spannq_add_clause_nr(Query *self, Query *clause);
578
+ extern FrtQuery *frt_spannq_new(int slop, bool in_order);
579
+ extern FrtQuery *frt_spannq_add_clause(FrtQuery *self, FrtQuery *clause);
580
+ extern FrtQuery *frt_spannq_add_clause_nr(FrtQuery *self, FrtQuery *clause);
550
581
 
551
582
  /***************************************************************************
552
- * SpanNotQuery
583
+ * FrtSpanNotQuery
553
584
  ***************************************************************************/
554
585
 
555
- typedef struct SpanNotQuery
586
+ typedef struct FrtSpanNotQuery
556
587
  {
557
- SpanQuery super;
558
- Query *inc;
559
- Query *exc;
560
- } SpanNotQuery;
588
+ FrtSpanQuery super;
589
+ FrtQuery *inc;
590
+ FrtQuery *exc;
591
+ } FrtSpanNotQuery;
561
592
 
562
- extern Query *spanxq_new(Query *inc, Query *exc);
563
- extern Query *spanxq_new_nr(Query *inc, Query *exc);
593
+ extern FrtQuery *frt_spanxq_new(FrtQuery *inc, FrtQuery *exc);
594
+ extern FrtQuery *frt_spanxq_new_nr(FrtQuery *inc, FrtQuery *exc);
564
595
 
565
596
 
566
597
  /***************************************************************************
567
- * SpanPrefixQuery
598
+ * FrtSpanPrefixQuery
568
599
  ***************************************************************************/
569
600
 
570
- #define SPAN_PREFIX_QUERY_MAX_TERMS 256
601
+ #define FRT_SPAN_PREFIX_QUERY_MAX_TERMS 256
571
602
 
572
- typedef struct SpanPrefixQuery
603
+ typedef struct FrtSpanPrefixQuery
573
604
  {
574
- SpanQuery super;
605
+ FrtSpanQuery super;
575
606
  char *prefix;
576
607
  int max_terms;
577
- } SpanPrefixQuery;
608
+ } FrtSpanPrefixQuery;
578
609
 
579
- extern Query *spanprq_new(const char *field, const char *prefix);
610
+ extern FrtQuery *frt_spanprq_new(FrtSymbol field, const char *prefix);
580
611
 
581
612
 
582
613
  /***************************************************************************
583
614
  *
584
- * Scorer
615
+ * FrtScorer
585
616
  *
586
617
  ***************************************************************************/
587
618
 
588
- #define SCORER_NULLIFY(mscorer) do {\
619
+ #define FRT_SCORER_NULLIFY(mscorer) do {\
589
620
  (mscorer)->destroy(mscorer);\
590
621
  (mscorer) = NULL;\
591
622
  } while (0)
592
623
 
593
- struct Scorer
624
+ struct FrtScorer
594
625
  {
595
- Similarity *similarity;
626
+ FrtSimilarity *similarity;
596
627
  int doc;
597
- float (*score)(Scorer *self);
598
- bool (*next)(Scorer *self);
599
- bool (*skip_to)(Scorer *self, int doc_num);
600
- Explanation *(*explain)(Scorer *self, int doc_num);
601
- void (*destroy)(Scorer *self);
628
+ float (*score)(FrtScorer *self);
629
+ bool (*next)(FrtScorer *self);
630
+ bool (*skip_to)(FrtScorer *self, int doc_num);
631
+ FrtExplanation *(*explain)(FrtScorer *self, int doc_num);
632
+ void (*destroy)(FrtScorer *self);
602
633
  };
603
634
 
604
- #define scorer_new(type, similarity) scorer_create(sizeof(type), similarity)
605
- /* Internal Scorer Function */
606
- extern void scorer_destroy_i(Scorer *self);
607
- extern Scorer *scorer_create(size_t size, Similarity *similarity);
608
- extern bool scorer_less_than(void *p1, void *p2);
609
- extern bool scorer_doc_less_than(const Scorer *s1, const Scorer *s2);
610
- extern int scorer_doc_cmp(const void *p1, const void *p2);
635
+ #define frt_scorer_new(type, similarity) frt_scorer_create(sizeof(type), similarity)
636
+ /* Internal FrtScorer Function */
637
+ extern void frt_scorer_destroy_i(FrtScorer *self);
638
+ extern FrtScorer *frt_scorer_create(size_t size, FrtSimilarity *similarity);
639
+ extern bool frt_scorer_less_than(void *p1, void *p2);
640
+ extern bool frt_scorer_doc_less_than(const FrtScorer *s1, const FrtScorer *s2);
641
+ extern int frt_scorer_doc_cmp(const void *p1, const void *p2);
611
642
 
612
643
  /***************************************************************************
613
- *
614
- * Sort
615
- *
644
+ * FrtComparable
616
645
  ***************************************************************************/
617
646
 
618
- enum SORT_TYPE
619
- {
620
- SORT_TYPE_SCORE,
621
- SORT_TYPE_DOC,
622
- SORT_TYPE_BYTE,
623
- SORT_TYPE_INTEGER,
624
- SORT_TYPE_FLOAT,
625
- SORT_TYPE_STRING,
626
- SORT_TYPE_AUTO
627
- };
628
-
629
- /***************************************************************************
630
- * Comparable
631
- ***************************************************************************/
632
-
633
- typedef struct Comparable
647
+ typedef struct FrtComparable
634
648
  {
635
649
  int type;
636
650
  union {
637
- int i;
651
+ long l;
638
652
  float f;
639
653
  char *s;
640
654
  void *p;
641
655
  } val;
642
656
  bool reverse : 1;
643
- } Comparable;
657
+ } FrtComparable;
644
658
 
645
659
  /***************************************************************************
646
- * SortField
660
+ *
661
+ * FrtSort
662
+ *
647
663
  ***************************************************************************/
648
664
 
649
- typedef struct SortField
665
+ typedef enum
650
666
  {
651
- mutex_t mutex;
652
- char *field;
653
- enum SORT_TYPE type;
654
- bool reverse : 1;
655
- void *index;
656
- int (*compare)(void *index_ptr, Hit *hit1, Hit *hit2);
657
- void (*get_val)(void *index_ptr, Hit *hit1, Comparable *comparable);
658
- void *(*create_index)(int size);
659
- void (*destroy_index)(void *p);
660
- void (*handle_term)(void *index, TermDocEnum *tde, char *text);
661
- } SortField;
667
+ FRT_SORT_TYPE_SCORE,
668
+ FRT_SORT_TYPE_DOC,
669
+ FRT_SORT_TYPE_BYTE,
670
+ FRT_SORT_TYPE_INTEGER,
671
+ FRT_SORT_TYPE_FLOAT,
672
+ FRT_SORT_TYPE_STRING,
673
+ FRT_SORT_TYPE_AUTO
674
+ } SortType;
662
675
 
663
- extern SortField *sort_field_new(char *field, enum SORT_TYPE type, bool reverse);
664
- extern SortField *sort_field_score_new(bool reverse);
665
- extern SortField *sort_field_doc_new(bool reverse);
666
- extern SortField *sort_field_int_new(char *field, bool reverse);
667
- extern SortField *sort_field_byte_new(char *field, bool reverse);
668
- extern SortField *sort_field_float_new(char *field, bool reverse);
669
- extern SortField *sort_field_string_new(char *field, bool reverse);
670
- extern SortField *sort_field_auto_new(char *field, bool reverse);
671
- extern void sort_field_destroy(void *p);
672
- extern char *sort_field_to_s(SortField *self);
676
+ /***************************************************************************
677
+ * FrtSortField
678
+ ***************************************************************************/
679
+
680
+ typedef struct FrtSortField
681
+ {
682
+ const FrtFieldIndexClass *field_index_class;
683
+ FrtSymbol field;
684
+ SortType type;
685
+ bool reverse : 1;
686
+ int (*compare)(void *index_ptr, FrtHit *hit1, FrtHit *hit2);
687
+ void (*get_val)(void *index_ptr, FrtHit *hit1, FrtComparable *comparable);
688
+ } FrtSortField;
673
689
 
674
- extern const SortField SORT_FIELD_SCORE;
675
- extern const SortField SORT_FIELD_SCORE_REV;
676
- extern const SortField SORT_FIELD_DOC;
677
- extern const SortField SORT_FIELD_DOC_REV;
690
+ extern FrtSortField *frt_sort_field_new(FrtSymbol field,
691
+ SortType type,
692
+ bool reverse);
693
+ extern FrtSortField *frt_sort_field_score_new(bool reverse);
694
+ extern FrtSortField *frt_sort_field_doc_new(bool reverse);
695
+ extern FrtSortField *frt_sort_field_int_new(FrtSymbol field, bool reverse);
696
+ extern FrtSortField *frt_sort_field_byte_new(FrtSymbol field, bool reverse);
697
+ extern FrtSortField *frt_sort_field_float_new(FrtSymbol field, bool reverse);
698
+ extern FrtSortField *frt_sort_field_string_new(FrtSymbol field, bool reverse);
699
+ extern FrtSortField *frt_sort_field_auto_new(FrtSymbol field, bool reverse);
700
+ extern void frt_sort_field_destroy(void *p);
701
+ extern char *frt_sort_field_to_s(FrtSortField *self);
702
+
703
+ extern const FrtSortField FRT_SORT_FIELD_SCORE;
704
+ extern const FrtSortField FRT_SORT_FIELD_SCORE_REV;
705
+ extern const FrtSortField FRT_SORT_FIELD_DOC;
706
+ extern const FrtSortField FRT_SORT_FIELD_DOC_REV;
678
707
 
679
708
  /***************************************************************************
680
- * Sort
709
+ * FrtSort
681
710
  ***************************************************************************/
682
711
 
683
- typedef struct Sort
712
+ typedef struct FrtSort
684
713
  {
685
- SortField **sort_fields;
714
+ FrtSortField **sort_fields;
686
715
  int size;
687
716
  int capa;
688
717
  int start;
689
718
  bool destroy_all : 1;
690
- } Sort;
719
+ } FrtSort;
691
720
 
692
- extern Sort *sort_new();
693
- extern void sort_destroy(void *p);
694
- extern void sort_add_sort_field(Sort *self, SortField *sf);
695
- extern void sort_clear(Sort *self);
696
- extern char *sort_to_s(Sort *self);
721
+ extern FrtSort *frt_sort_new();
722
+ extern void frt_sort_destroy(void *p);
723
+ extern void frt_sort_add_sort_field(FrtSort *self, FrtSortField *sf);
724
+ extern void frt_sort_clear(FrtSort *self);
725
+ extern char *frt_sort_to_s(FrtSort *self);
697
726
 
698
727
  /***************************************************************************
699
728
  * FieldSortedHitQueue
700
729
  ***************************************************************************/
701
730
 
702
- extern Hit *fshq_pq_pop(PriorityQueue *pq);
703
- extern void fshq_pq_down(PriorityQueue *pq);
704
- extern void fshq_pq_insert(PriorityQueue *pq, Hit *hit);
705
- extern void fshq_pq_destroy(PriorityQueue *pq);
706
- extern PriorityQueue *fshq_pq_new(int size, Sort *sort, IndexReader *ir);
707
- extern Hit *fshq_pq_pop_fd(PriorityQueue *pq);
731
+ extern FrtHit *frt_fshq_pq_pop(FrtPriorityQueue *pq);
732
+ extern void frt_fshq_pq_down(FrtPriorityQueue *pq);
733
+ extern void frt_fshq_pq_insert(FrtPriorityQueue *pq, FrtHit *hit);
734
+ extern void frt_fshq_pq_destroy(FrtPriorityQueue *pq);
735
+ extern FrtPriorityQueue *frt_fshq_pq_new(int size, FrtSort *sort, FrtIndexReader *ir);
736
+ extern FrtHit *frt_fshq_pq_pop_fd(FrtPriorityQueue *pq);
708
737
 
709
738
  /***************************************************************************
710
- * FieldDoc
739
+ * FrtFieldDoc
711
740
  ***************************************************************************/
712
741
 
713
- typedef struct FieldDoc
742
+ typedef struct FrtFieldDoc
714
743
  {
715
- Hit hit;
744
+ FrtHit hit;
716
745
  int size;
717
- Comparable comparables[1];
718
- } FieldDoc;
746
+ FrtComparable comparables[1];
747
+ } FrtFieldDoc;
719
748
 
720
- extern void fd_destroy(FieldDoc *fd);
749
+ extern void frt_fd_destroy(FrtFieldDoc *fd);
721
750
 
722
751
  /***************************************************************************
723
752
  * FieldDocSortedHitQueue
724
753
  ***************************************************************************/
725
754
 
726
- extern bool fdshq_lt(FieldDoc *fd1, FieldDoc *fd2);
755
+ extern bool frt_fdshq_lt(FrtFieldDoc *fd1, FrtFieldDoc *fd2);
727
756
 
728
757
  /***************************************************************************
729
758
  *
730
- * Searcher
759
+ * FrtSearcher
731
760
  *
732
761
  ***************************************************************************/
733
762
 
734
- typedef bool (*filter_ft)(int doc_num, float score, Searcher *self);
763
+ typedef float (*frt_filter_ft)(int doc_num, float score, FrtSearcher *self, void *arg);
764
+
765
+ typedef struct FrtPostFilter
766
+ {
767
+ float (*filter_func)(int doc_num, float score, FrtSearcher *self, void *arg);
768
+ void *arg;
769
+ } FrtPostFilter;
735
770
 
736
- struct Searcher
771
+ struct FrtSearcher
737
772
  {
738
- Similarity *similarity;
739
- int (*doc_freq)(Searcher *self, const char *field,
773
+ FrtSimilarity *similarity;
774
+ int (*doc_freq)(FrtSearcher *self, FrtSymbol field,
740
775
  const char *term);
741
- Document *(*get_doc)(Searcher *self, int doc_num);
742
- LazyDoc *(*get_lazy_doc)(Searcher *self, int doc_num);
743
- int (*max_doc)(Searcher *self);
744
- Weight *(*create_weight)(Searcher *self, Query *query);
745
- TopDocs *(*search)(Searcher *self, Query *query, int first_doc,
746
- int num_docs, Filter *filter, Sort *sort,
747
- filter_ft filter_func,
776
+ FrtDocument *(*get_doc)(FrtSearcher *self, int doc_num);
777
+ FrtLazyDoc *(*get_lazy_doc)(FrtSearcher *self, int doc_num);
778
+ int (*max_doc)(FrtSearcher *self);
779
+ FrtWeight *(*create_weight)(FrtSearcher *self, FrtQuery *query);
780
+ FrtTopDocs *(*search)(FrtSearcher *self, FrtQuery *query, int first_doc,
781
+ int num_docs, FrtFilter *filter, FrtSort *sort,
782
+ FrtPostFilter *post_filter,
748
783
  bool load_fields);
749
- TopDocs *(*search_w)(Searcher *self, Weight *weight, int first_doc,
750
- int num_docs, Filter *filter, Sort *sort,
751
- filter_ft filter_func,
784
+ FrtTopDocs *(*search_w)(FrtSearcher *self, FrtWeight *weight, int first_doc,
785
+ int num_docs, FrtFilter *filter, FrtSort *sort,
786
+ FrtPostFilter *post_filter,
752
787
  bool load_fields);
753
- void (*search_each)(Searcher *self, Query *query, Filter *filter,
754
- filter_ft filter_func,
755
- void (*fn)(Searcher *, int, float, void *),
788
+ void (*search_each)(FrtSearcher *self, FrtQuery *query, FrtFilter *filter,
789
+ FrtPostFilter *post_filter,
790
+ void (*fn)(FrtSearcher *, int, float, void *),
756
791
  void *arg);
757
- void (*search_each_w)(Searcher *self, Weight *weight,
758
- Filter *filter,
759
- filter_ft filter_func,
760
- void (*fn)(Searcher *, int, float, void *),
792
+ void (*search_each_w)(FrtSearcher *self, FrtWeight *weight,
793
+ FrtFilter *filter,
794
+ FrtPostFilter *post_filter,
795
+ void (*fn)(FrtSearcher *, int, float, void *),
761
796
  void *arg);
762
- Query *(*rewrite)(Searcher *self, Query *original);
763
- Explanation *(*explain)(Searcher *self, Query *query, int doc_num);
764
- Explanation *(*explain_w)(Searcher *self, Weight *weight, int doc_num);
765
- TermVector *(*get_term_vector)(Searcher *self, const int doc_num,
766
- const char *field);
767
- Similarity *(*get_similarity)(Searcher *self);
768
- void (*close)(Searcher *self);
769
- void *arg; /* used to pass values to Searcher functions */
797
+ /*
798
+ * Scan the index for all documents that match a query and write the
799
+ * results to a buffer. It will stop scanning once the limit is reached
800
+ * and it starts scanning from offset_docnum.
801
+ *
802
+ * Note: Unlike the offset_docnum in other search methods, this
803
+ * offset_docnum refers to document number and not hit.
804
+ */
805
+ int (*search_unscored)(FrtSearcher *searcher,
806
+ FrtQuery *query,
807
+ int *buf,
808
+ int limit,
809
+ int offset_docnum);
810
+ int (*search_unscored_w)(FrtSearcher *searcher,
811
+ FrtWeight *weight,
812
+ int *buf,
813
+ int limit,
814
+ int offset_docnum);
815
+ FrtQuery *(*rewrite)(FrtSearcher *self, FrtQuery *original);
816
+ FrtExplanation *(*explain)(FrtSearcher *self, FrtQuery *query, int doc_num);
817
+ FrtExplanation *(*explain_w)(FrtSearcher *self, FrtWeight *weight, int doc_num);
818
+ FrtTermVector *(*get_term_vector)(FrtSearcher *self, const int doc_num,
819
+ FrtSymbol field);
820
+ FrtSimilarity *(*get_similarity)(FrtSearcher *self);
821
+ void (*close)(FrtSearcher *self);
770
822
  };
771
823
 
772
- #define searcher_doc_freq(s, t) s->doc_freq(s, t)
773
- #define searcher_get_doc(s, dn) s->get_doc(s, dn)
774
- #define searcher_get_lazy_doc(s, dn) s->get_lazy_doc(s, dn)
775
- #define searcher_max_doc(s) s->max_doc(s)
776
- #define searcher_rewrite(s, q) s->rewrite(s, q)
777
- #define searcher_explain(s, q, dn) s->explain(s, q, dn)
778
- #define searcher_explain_w(s, q, dn) s->explain_w(s, q, dn)
779
- #define searcher_get_similarity(s) s->get_similarity(s)
780
- #define searcher_close(s) s->close(s)
781
- #define searcher_search(s, q, fd, nd, filt, sort, ff)\
824
+ #define frt_searcher_doc_freq(s, t) s->doc_freq(s, t)
825
+ #define frt_searcher_get_doc(s, dn) s->get_doc(s, dn)
826
+ #define frt_searcher_get_lazy_doc(s, dn) s->get_lazy_doc(s, dn)
827
+ #define frt_searcher_max_doc(s) s->max_doc(s)
828
+ #define frt_searcher_rewrite(s, q) s->rewrite(s, q)
829
+ #define frt_searcher_explain(s, q, dn) s->explain(s, q, dn)
830
+ #define frt_searcher_explain_w(s, q, dn) s->explain_w(s, q, dn)
831
+ #define frt_searcher_get_similarity(s) s->get_similarity(s)
832
+ #define frt_searcher_close(s) s->close(s)
833
+ #define frt_searcher_search(s, q, fd, nd, filt, sort, ff)\
782
834
  s->search(s, q, fd, nd, filt, sort, ff, false)
783
- #define searcher_search_fd(s, q, fd, nd, filt, sort, ff)\
835
+ #define frt_searcher_search_fd(s, q, fd, nd, filt, sort, ff)\
784
836
  s->search(s, q, fd, nd, filt, sort, ff, true)
785
- #define searcher_search_each(s, q, filt, ff, fn, arg)\
837
+ #define frt_searcher_search_each(s, q, filt, ff, fn, arg)\
786
838
  s->search_each(s, q, filt, ff, fn, arg)
787
- #define searcher_search_each_w(s, q, filt, ff, fn, arg)\
788
- s->search_each_w(s, q, filt, ff, fn, arg)
839
+ #define frt_searcher_search_unscored(s, q, buf, limit, offset_docnum)\
840
+ s->search_unscored(s, q, buf, limit, offset_docnum)
789
841
 
790
842
 
791
- extern MatchVector *searcher_get_match_vector(Searcher *self,
792
- Query *query,
843
+ extern FrtMatchVector *frt_searcher_get_match_vector(FrtSearcher *self,
844
+ FrtQuery *query,
793
845
  const int doc_num,
794
- const char *field);
795
- extern char **searcher_highlight(Searcher *self,
796
- Query *query,
846
+ FrtSymbol field);
847
+ extern char **frt_searcher_highlight(FrtSearcher *self,
848
+ FrtQuery *query,
797
849
  const int doc_num,
798
- const char *field,
850
+ FrtSymbol field,
799
851
  const int excerpt_len,
800
852
  const int num_excerpts,
801
853
  const char *pre_tag,
@@ -804,82 +856,98 @@ extern char **searcher_highlight(Searcher *self,
804
856
 
805
857
  /***************************************************************************
806
858
  *
807
- * IndexSearcher
859
+ * FrtIndexSearcher
808
860
  *
809
861
  ***************************************************************************/
810
862
 
811
- typedef struct IndexSearcher {
812
- Searcher super;
813
- IndexReader *ir;
863
+ typedef struct FrtIndexSearcher {
864
+ FrtSearcher super;
865
+ FrtIndexReader *ir;
814
866
  bool close_ir : 1;
815
- } IndexSearcher;
867
+ } FrtIndexSearcher;
868
+
869
+ extern FrtSearcher *frt_isea_new(FrtIndexReader *ir);
870
+ extern int frt_isea_doc_freq(FrtSearcher *self, FrtSymbol field, const char *term);
871
+
816
872
 
817
- extern Searcher *isea_new(IndexReader *ir);
818
- extern int isea_doc_freq(Searcher *self, const char *field, const char *term);
819
873
 
820
874
  /***************************************************************************
821
875
  *
822
- * MultiSearcher
876
+ * FrtMultiSearcher
823
877
  *
824
878
  ***************************************************************************/
825
879
 
826
- typedef struct MultiSearcher
880
+ typedef struct FrtMultiSearcher
827
881
  {
828
- Searcher super;
882
+ FrtSearcher super;
829
883
  int s_cnt;
830
- Searcher **searchers;
884
+ FrtSearcher **searchers;
831
885
  int *starts;
832
886
  int max_doc;
833
887
  bool close_subs : 1;
834
- } MultiSearcher;
888
+ } FrtMultiSearcher;
835
889
 
836
- extern Searcher *msea_new(Searcher **searchers, int s_cnt, bool close_subs);
890
+ extern FrtSearcher *frt_msea_new(FrtSearcher **searchers, int s_cnt, bool close_subs);
837
891
 
838
892
  /***************************************************************************
839
893
  *
840
- * QParser
894
+ * FrtQParser
841
895
  *
842
896
  ***************************************************************************/
843
897
 
844
- #define QP_CONC_WORDS 2
845
- #define QP_MAX_CLAUSES 512
898
+ #define FRT_QP_CONC_WORDS 2
899
+ #define FRT_QP_MAX_CLAUSES 512
900
+ typedef struct FrtFieldStack {
901
+ FrtHashSet *fields;
902
+ struct FrtFieldStack *next;
903
+ bool destroy : 1;
904
+ } FrtFieldStack;
846
905
 
847
- typedef struct QParser
906
+ typedef struct FrtQueryParser
848
907
  {
849
- mutex_t mutex;
908
+ frt_mutex_t mutex;
850
909
  int def_slop;
851
910
  int max_clauses;
852
911
  int phq_pos_inc;
853
912
  char *qstr;
854
913
  char *qstrp;
855
- char buf[QP_CONC_WORDS][MAX_WORD_SIZE];
914
+ char buf[FRT_QP_CONC_WORDS][FRT_MAX_WORD_SIZE];
856
915
  char *dynbuf;
857
916
  int buf_index;
858
- HashTable *field_cache;
859
- HashSet *fields;
860
- HashSet *fields_buf;
861
- HashSet *def_fields;
862
- HashSet *all_fields;
863
- HashSet *tokenized_fields;
864
- Analyzer *analyzer;
865
- HashTable *ts_cache;
866
- Query *result;
867
- TokenStream *non_tokenizer;
917
+ FrtHash *field_cache;
918
+ FrtHashSet *def_fields;
919
+ FrtHashSet *all_fields;
920
+ FrtHashSet *tokenized_fields;
921
+ FrtHashSet *fields;
922
+ FrtFieldStack *fields_top;
923
+ FrtAnalyzer *analyzer;
924
+ FrtHash *ts_cache;
925
+ FrtQuery *result;
926
+ FrtTokenStream *non_tokenizer;
868
927
  bool or_default : 1;
869
928
  bool wild_lower : 1;
870
929
  bool clean_str : 1;
871
930
  bool handle_parse_errors : 1;
872
931
  bool allow_any_fields : 1;
873
- bool close_def_fields : 1;
874
932
  bool destruct : 1;
875
933
  bool recovering : 1;
876
934
  bool use_keywords : 1;
877
- } QParser;
878
-
879
- extern QParser *qp_new(HashSet *all_fields, HashSet *def_fields,
880
- HashSet *tokenized_fields, Analyzer *analyzer);
881
- extern void qp_destroy(QParser *self);
882
- extern Query *qp_parse(QParser *self, char *qstr);
883
- extern char *qp_clean_str(char *str);
935
+ bool use_typed_range_query : 1;
936
+ } FrtQueryParser;
937
+ typedef FrtQueryParser FrtQParser; /* QParser is an alias for QueryParser */
938
+
939
+ extern FrtQParser *frt_qp_new(FrtAnalyzer *analyzer);
940
+ extern void frt_qp_add_field(FrtQParser *self, FrtSymbol field,
941
+ bool is_default, bool is_tokenized);
942
+ extern void frt_qp_destroy(FrtQParser *self);
943
+ extern FrtQuery *frt_qp_parse(FrtQParser *self, char *qstr);
944
+ extern char *frt_qp_clean_str(char *str);
945
+
946
+ extern float frt_qp_default_fuzzy_min_sim;
947
+ extern int frt_qp_default_fuzzy_pre_len;
948
+
949
+ #ifdef __cplusplus
950
+ } // extern "C"
951
+ #endif
884
952
 
885
953
  #endif