다음은 기존 데이터베이스를 인덱싱하는 스크립트입니다. FWIW, Whoosh는 이것을 일괄 인덱싱이라고합니다.
이 조금 거친이지만, 그것은 작동합니다
이
#!/usr/bin/env python2
import os
import sys
import app
from models import YourModel as Model
from flask.ext.whooshalchemy import whoosh_index
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
atatime = 512
with app.app_context():
index = whoosh_index(app, Model)
searchable = Model.__searchable__
print 'counting rows...'
total = int(Model.query.order_by(None).count())
done = 0
print 'total rows: {}'.format(total)
writer = index.writer(limitmb=10000, procs=16, multisegment=True)
for p in Model.query.yield_per(atatime):
record = dict([(s, p.__dict__[s]) for s in searchable])
record.update({'id' : unicode(p.id)}) # id is mandatory, or whoosh won't work
writer.add_document(**record)
done += 1
if done % atatime == 0:
print 'c {}/{} ({}%)'.format(done, total, round((float(done)/total)*100,2)),
print '{}/{} ({}%)'.format(done, total, round((float(done)/total)*100,2))
writer.commit()
당신은 매개 변수와 함께 플레이 할 수 있습니다 :
atatime
- 레코드의 번호가 데이터베이스에서 한 번에 뽑아
limitmb
- 병렬 에서 사용하는 코어 - "최대"메가 바이트는
procs
를 사용하는
8 코어 AWS 인스턴스에서 약 360,000 개의 레코드를 인덱싱하는 데 사용했습니다. 약 4 분이 걸렸습니다. 대부분이 (단일 스레드) commit()
을 기다리고있었습니다.
pip install flask-whooshalchemyplus
from flask-whooshalchemyplus import index_all
index_all(app)
나는 또한 많은 버그를 몇 가지 새로운 기능을 추가 및 수정 :
어떻게해야하는지 알 수 없기 때문에 모든 레코드를 다시 삽입했습니다. –