1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
|
#
# $Id: sphinxclient.h 2654 2011-01-31 01:20:58Z kevg $
#
#
# Copyright (c) 2001-2011, Andrew Aksyonoff
# Copyright (c) 2008-2011, Sphinx Technologies Inc
# All rights reserved
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Library General Public License. You should
# have received a copy of the LGPL license along with this program; if you
# did not, you can find it at http://www.gnu.org/
#
## Nim wrapper for ``sphinx``.
{.deadCodeElim: on.}
when defined(windows):
const
sphinxDll* = "spinx.dll"
elif defined(macosx):
const
sphinxDll* = "libspinx.dylib"
else:
const
sphinxDll* = "libspinxclient.so"
#/ known searchd status codes:
const
SEARCHD_OK* = 0
SEARCHD_ERROR* = 1
SEARCHD_RETRY* = 2
SEARCHD_WARNING* = 3
#/ known match modes
const
SPH_MATCH_ALL* = 0
SPH_MATCH_ANY* = 1
SPH_MATCH_PHRASE* = 2
SPH_MATCH_BOOLEAN* = 3
SPH_MATCH_EXTENDED* = 4
SPH_MATCH_FULLSCAN* = 5
SPH_MATCH_EXTENDED2* = 6
#/ known ranking modes (ext2 only)
const
SPH_RANK_PROXIMITY_BM25* = 0
SPH_RANK_BM25* = 1
SPH_RANK_NONE* = 2
SPH_RANK_WORDCOUNT* = 3
SPH_RANK_PROXIMITY* = 4
SPH_RANK_MATCHANY* = 5
SPH_RANK_FIELDMASK* = 6
SPH_RANK_SPH04* = 7
SPH_RANK_DEFAULT* = SPH_RANK_PROXIMITY_BM25
#/ known sort modes
const
SPH_SORT_RELEVANCE* = 0
SPH_SORT_ATTR_DESC* = 1
SPH_SORT_ATTR_ASC* = 2
SPH_SORT_TIME_SEGMENTS* = 3
SPH_SORT_EXTENDED* = 4
SPH_SORT_EXPR* = 5
#/ known filter types
const
SPH_FILTER_VALUES* = 0
SPH_FILTER_RANGE* = 1
SPH_FILTER_FLOATRANGE* = 2
#/ known attribute types
const
SPH_ATTR_INTEGER* = 1
SPH_ATTR_TIMESTAMP* = 2
SPH_ATTR_ORDINAL* = 3
SPH_ATTR_BOOL* = 4
SPH_ATTR_FLOAT* = 5
SPH_ATTR_BIGINT* = 6
SPH_ATTR_STRING* = 7
SPH_ATTR_MULTI* = 0x40000000
#/ known grouping functions
const
SPH_GROUPBY_DAY* = 0
SPH_GROUPBY_WEEK* = 1
SPH_GROUPBY_MONTH* = 2
SPH_GROUPBY_YEAR* = 3
SPH_GROUPBY_ATTR* = 4
SPH_GROUPBY_ATTRPAIR* = 5
type
SphinxBool* {.size: sizeof(cint).} = enum
SPH_FALSE = 0,
SPH_TRUE = 1
Client {.pure, final.} = object
PClient* = ptr Client
Wordinfo*{.pure, final.} = object
word*: cstring
docs*: cint
hits*: cint
Result*{.pure, final.} = object
error*: cstring
warning*: cstring
status*: cint
num_fields*: cint
fields*: cstringArray
num_attrs*: cint
attr_names*: cstringArray
attr_types*: ptr array [0..100_000, cint]
num_matches*: cint
values_pool*: pointer
total*: cint
total_found*: cint
time_msec*: cint
num_words*: cint
words*: ptr array [0..100_000, Wordinfo]
Excerpt_options*{.pure, final.} = object
before_match*: cstring
after_match*: cstring
chunk_separator*: cstring
html_strip_mode*: cstring
passage_boundary*: cstring
limit*: cint
limit_passages*: cint
limit_words*: cint
around*: cint
start_passage_id*: cint
exact_phrase*: SphinxBool
single_passage*: SphinxBool
use_boundaries*: SphinxBool
weight_order*: SphinxBool
query_mode*: SphinxBool
force_all_words*: SphinxBool
load_files*: SphinxBool
allow_empty*: SphinxBool
emit_zones*: SphinxBool
Keyword_info*{.pure, final.} = object
tokenized*: cstring
normalized*: cstring
num_docs*: cint
num_hits*: cint
{.deprecated: [TSphinxBool: SphinxBool,
Tclient: Client, Twordinfo: Wordinfo, Tresult: Result,
Texcerpt_options: Excerpt_options, Tkeyword_info: Keyword_info].}
proc create*(copy_args: SphinxBool): PClient{.cdecl, importc: "sphinx_create",
dynlib: sphinxDll.}
proc cleanup*(client: PClient){.cdecl, importc: "sphinx_cleanup",
dynlib: sphinxDll.}
proc destroy*(client: PClient){.cdecl, importc: "sphinx_destroy",
dynlib: sphinxDll.}
proc error*(client: PClient): cstring{.cdecl, importc: "sphinx_error",
dynlib: sphinxDll.}
proc warning*(client: PClient): cstring{.cdecl, importc: "sphinx_warning",
dynlib: sphinxDll.}
proc set_server*(client: PClient, host: cstring, port: cint): SphinxBool{.cdecl,
importc: "sphinx_set_server", dynlib: sphinxDll.}
proc set_connect_timeout*(client: PClient, seconds: float32): SphinxBool{.cdecl,
importc: "sphinx_set_connect_timeout", dynlib: sphinxDll.}
proc open*(client: PClient): SphinxBool{.cdecl, importc: "sphinx_open",
dynlib: sphinxDll.}
proc close*(client: PClient): SphinxBool{.cdecl, importc: "sphinx_close",
dynlib: sphinxDll.}
proc set_limits*(client: PClient, offset: cint, limit: cint,
max_matches: cint, cutoff: cint): SphinxBool{.cdecl,
importc: "sphinx_set_limits", dynlib: sphinxDll.}
proc set_max_query_time*(client: PClient, max_query_time: cint): SphinxBool{.
cdecl, importc: "sphinx_set_max_query_time", dynlib: sphinxDll.}
proc set_match_mode*(client: PClient, mode: cint): SphinxBool{.cdecl,
importc: "sphinx_set_match_mode", dynlib: sphinxDll.}
proc set_ranking_mode*(client: PClient, ranker: cint): SphinxBool{.cdecl,
importc: "sphinx_set_ranking_mode", dynlib: sphinxDll.}
proc set_sort_mode*(client: PClient, mode: cint, sortby: cstring): SphinxBool{.
cdecl, importc: "sphinx_set_sort_mode", dynlib: sphinxDll.}
proc set_field_weights*(client: PClient, num_weights: cint,
field_names: cstringArray, field_weights: ptr cint): SphinxBool{.
cdecl, importc: "sphinx_set_field_weights", dynlib: sphinxDll.}
proc set_index_weights*(client: PClient, num_weights: cint,
index_names: cstringArray, index_weights: ptr cint): SphinxBool{.
cdecl, importc: "sphinx_set_index_weights", dynlib: sphinxDll.}
proc set_id_range*(client: PClient, minid: int64, maxid: int64): SphinxBool{.
cdecl, importc: "sphinx_set_id_range", dynlib: sphinxDll.}
proc add_filter*(client: PClient, attr: cstring, num_values: cint,
values: ptr int64, exclude: SphinxBool): SphinxBool{.cdecl,
importc: "sphinx_add_filter", dynlib: sphinxDll.}
proc add_filter_range*(client: PClient, attr: cstring, umin: int64,
umax: int64, exclude: SphinxBool): SphinxBool{.cdecl,
importc: "sphinx_add_filter_range", dynlib: sphinxDll.}
proc add_filter_float_range*(client: PClient, attr: cstring, fmin: float32,
fmax: float32, exclude: SphinxBool): SphinxBool{.cdecl,
importc: "sphinx_add_filter_float_range", dynlib: sphinxDll.}
proc set_geoanchor*(client: PClient, attr_latitude: cstring,
attr_longitude: cstring, latitude: float32, longitude: float32): SphinxBool{.
cdecl, importc: "sphinx_set_geoanchor", dynlib: sphinxDll.}
proc set_groupby*(client: PClient, attr: cstring, groupby_func: cint,
group_sort: cstring): SphinxBool{.cdecl,
importc: "sphinx_set_groupby", dynlib: sphinxDll.}
proc set_groupby_distinct*(client: PClient, attr: cstring): SphinxBool{.cdecl,
importc: "sphinx_set_groupby_distinct", dynlib: sphinxDll.}
proc set_retries*(client: PClient, count: cint, delay: cint): SphinxBool{.cdecl,
importc: "sphinx_set_retries", dynlib: sphinxDll.}
proc add_override*(client: PClient, attr: cstring, docids: ptr int64,
num_values: cint, values: ptr cint): SphinxBool{.cdecl,
importc: "sphinx_add_override", dynlib: sphinxDll.}
proc set_select*(client: PClient, select_list: cstring): SphinxBool{.cdecl,
importc: "sphinx_set_select", dynlib: sphinxDll.}
proc reset_filters*(client: PClient){.cdecl,
importc: "sphinx_reset_filters", dynlib: sphinxDll.}
proc reset_groupby*(client: PClient){.cdecl,
importc: "sphinx_reset_groupby", dynlib: sphinxDll.}
proc query*(client: PClient, query: cstring, index_list: cstring,
comment: cstring): ptr Result{.cdecl, importc: "sphinx_query",
dynlib: sphinxDll.}
proc add_query*(client: PClient, query: cstring, index_list: cstring,
comment: cstring): cint{.cdecl, importc: "sphinx_add_query",
dynlib: sphinxDll.}
proc run_queries*(client: PClient): ptr Result{.cdecl,
importc: "sphinx_run_queries", dynlib: sphinxDll.}
proc get_num_results*(client: PClient): cint{.cdecl,
importc: "sphinx_get_num_results", dynlib: sphinxDll.}
proc get_id*(result: ptr Result, match: cint): int64{.cdecl,
importc: "sphinx_get_id", dynlib: sphinxDll.}
proc get_weight*(result: ptr Result, match: cint): cint{.cdecl,
importc: "sphinx_get_weight", dynlib: sphinxDll.}
proc get_int*(result: ptr Result, match: cint, attr: cint): int64{.cdecl,
importc: "sphinx_get_int", dynlib: sphinxDll.}
proc get_float*(result: ptr Result, match: cint, attr: cint): float32{.cdecl,
importc: "sphinx_get_float", dynlib: sphinxDll.}
proc get_mva*(result: ptr Result, match: cint, attr: cint): ptr cint{.
cdecl, importc: "sphinx_get_mva", dynlib: sphinxDll.}
proc get_string*(result: ptr Result, match: cint, attr: cint): cstring{.cdecl,
importc: "sphinx_get_string", dynlib: sphinxDll.}
proc init_excerpt_options*(opts: ptr Excerpt_options){.cdecl,
importc: "sphinx_init_excerpt_options", dynlib: sphinxDll.}
proc build_excerpts*(client: PClient, num_docs: cint, docs: cstringArray,
index: cstring, words: cstring, opts: ptr Excerpt_options): cstringArray{.
cdecl, importc: "sphinx_build_excerpts", dynlib: sphinxDll.}
proc update_attributes*(client: PClient, index: cstring, num_attrs: cint,
attrs: cstringArray, num_docs: cint,
docids: ptr int64, values: ptr int64): cint{.
cdecl, importc: "sphinx_update_attributes", dynlib: sphinxDll.}
proc update_attributes_mva*(client: PClient, index: cstring, attr: cstring,
docid: int64, num_values: cint,
values: ptr cint): cint{.cdecl,
importc: "sphinx_update_attributes_mva", dynlib: sphinxDll.}
proc build_keywords*(client: PClient, query: cstring, index: cstring,
hits: SphinxBool, out_num_keywords: ptr cint): ptr Keyword_info{.
cdecl, importc: "sphinx_build_keywords", dynlib: sphinxDll.}
proc status*(client: PClient, num_rows: ptr cint, num_cols: ptr cint): cstringArray{.
cdecl, importc: "sphinx_status", dynlib: sphinxDll.}
proc status_destroy*(status: cstringArray, num_rows: cint, num_cols: cint){.
cdecl, importc: "sphinx_status_destroy", dynlib: sphinxDll.}
|