Skip to content

Commit 54231ef

Browse files
committed
add xapian 2
1 parent adda490 commit 54231ef

File tree

5 files changed

+62
-7
lines changed

5 files changed

+62
-7
lines changed

init_server.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#!/usr/bin/env python3
33
cd `dirname $0`
44
echo "installing dependencies..."
5-
apt-get install -y python3 python3-pip zlib1g-dev liblzo2-dev
5+
apt-get install -y python3 python3-pip zlib1g-dev liblzo2-dev python3-xapian libxapian-dev
66
pip3 install -r requirements1.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
77
pip3 install -r requirements2.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
88
cd mdict/readmdict/pyx

init_wsl.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22
#!/usr/bin/env python3
33
cd `dirname $0`
4-
apt-get install -y python3 python3-pip apache2 libapache2-mod-wsgi-py3 zlib1g-dev liblzo2-dev
4+
apt-get install -y python3 python3-pip apache2 libapache2-mod-wsgi-py3
55
cd ..
66
chmod -R 777 django-mdict
77
cd django-mdict

mdict/mdict_utils/mdict_func.py

+11
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,14 @@ def compare_time(time1, time2):
214214

215215
def get_dic_attrs(dic):
216216
return dic.pk, dic.mdict_name, dic.mdict_file, dic.mdict_priority
217+
218+
219+
def check_xapian():
220+
# 是否已安装xapian
221+
try:
222+
import xapian
223+
database = xapian.Database()
224+
except Exception:
225+
return False
226+
227+
return True

mdict/urls.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
url(r'^dic/(\d+)/$', views.mdict_dic),
1212
url(r'^dic/(\d+)/(.+)', views.search_mdd),
1313
url(r'^es/(\d+)/(.+)/', views.search_mdd),
14-
url(r'^esdic/(\d+)/(.+)/', views.search_mdd),
14+
url(r'^esdic/(\d+)/(.+)', views.search_mdd),
1515
path('exfile/', views.get_external_file),
1616
url('exfile/(.+)', views.get_external_file),
1717
path('es/exfile/', views.get_external_file),

mdict/views.py

+48-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import time
55
import csv
66
import random
7+
import xapian
78
from urllib.parse import quote, unquote
89

910
from django.http import HttpResponse
@@ -23,7 +24,7 @@
2324
from base.base_func2 import is_mobile
2425
from base.base_func3 import t2s, s2t
2526

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
2728
from mdict.mdict_utils.chaizi_reverse import HanziChaizi
2829
from mdict.mdict_utils.data_utils import get_or_create_dic, init_database
2930
from mdict.mdict_utils.loop_decorator import loop_mdict_list, innerObject
@@ -199,9 +200,23 @@ def es_search(request):
199200

200201
tokens = get_tokens(query)
201202

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)
205220

206221
result = search_revise(query, result, is_en)
207222

@@ -226,6 +241,35 @@ def es_search(request):
226241
return Response(ret)
227242

228243

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+
229273
def init_index(request):
230274
group = int(request.GET.get('dic_group', 0))
231275
try:

0 commit comments

Comments
 (0)