4
4
import time
5
5
import csv
6
6
import random
7
+ import xapian
7
8
from urllib .parse import quote , unquote
8
9
9
10
from django .http import HttpResponse
23
24
from base .base_func2 import is_mobile
24
25
from base .base_func3 import t2s , s2t
25
26
26
- from mdict .mdict_utils .mdict_func import write_to_history , get_history_file , compare_time , get_dic_attrs
27
+ from mdict .mdict_utils .mdict_func import write_to_history , get_history_file , compare_time , get_dic_attrs , check_xapian
27
28
from mdict .mdict_utils .chaizi_reverse import HanziChaizi
28
29
from mdict .mdict_utils .data_utils import get_or_create_dic , init_database
29
30
from mdict .mdict_utils .loop_decorator import loop_mdict_list , innerObject
@@ -199,9 +200,23 @@ def es_search(request):
199
200
200
201
tokens = get_tokens (query )
201
202
202
- result , total_count = get_es_results (query , dic_pk , result_num , result_page , frag_size , frag_num , es_phrase ,
203
- es_entry , es_content ,
204
- es_and )
203
+ enable_es_search = True
204
+
205
+ if dic_pk > - 1 and check_xapian ():
206
+ dics = MdictDic .objects .filter (pk = dic_pk )
207
+ if len (dics ) > 0 :
208
+ dic = dics [0 ]
209
+ dic_file = dic .mdict_file
210
+ temp_object = init_vars .mdict_odict [dic_file ]
211
+ mdx = temp_object .mdx
212
+ if mdx .get_fpath ().endswith ('.zim' ):
213
+ result , total_count = get_zim_results (query , dic , mdx , result_page , result_num , es_entry , es_content )
214
+ enable_es_search = False
215
+
216
+ if enable_es_search :
217
+ result , total_count = get_es_results (query , dic_pk , result_num , result_page , frag_size , frag_num , es_phrase ,
218
+ es_entry , es_content ,
219
+ es_and )
205
220
206
221
result = search_revise (query , result , is_en )
207
222
@@ -226,6 +241,35 @@ def es_search(request):
226
241
return Response (ret )
227
242
228
243
244
+ def get_zim_results (query , dic , mdx , result_page , result_num , es_entry , es_content ):
245
+ result = []
246
+
247
+ if es_content :
248
+ index_path = mdx .full_index_path
249
+ else :
250
+ index_path = mdx .title_index_path
251
+ database = xapian .Database (index_path )
252
+ enquire = xapian .Enquire (database )
253
+ query_string = query
254
+
255
+ qp = xapian .QueryParser ()
256
+ qp .set_database (database )
257
+ qp .set_stemming_strategy (xapian .QueryParser .STEM_SOME )
258
+ query = qp .parse_query (query_string )
259
+ enquire .set_query (query )
260
+ matches = enquire .get_mset ((result_page - 1 ) * result_num , result_page * result_num )
261
+ total_num = matches .get_matches_estimated ()
262
+
263
+ zim_file = open (mdx .get_fpath (), 'rb' )
264
+ for match in matches :
265
+ url = match .document .get_data ().decode ('utf-8' )
266
+ sobj = SearchObject (mdx , [], get_dic_attrs (dic ), url , is_dic = True )
267
+ result .extend (sobj .search_entry_list ())
268
+ zim_file .close ()
269
+
270
+ return result , total_num
271
+
272
+
229
273
def init_index (request ):
230
274
group = int (request .GET .get ('dic_group' , 0 ))
231
275
try :
0 commit comments