2009-06-22 5 views
10

Ho bisogno di fare ricerche full-text con Google App Engine. Ho trovato il progetto Whoosh e funziona molto bene, purché utilizzi l'ambiente di sviluppo App Engine ... Quando carico la mia applicazione su App Engine, ricevo il seguente TraceBack. Per i miei test, sto usando l'applicazione di esempio fornita in questo progetto. Qualche idea su cosa sto facendo male?Ricerca full-text su App Engine con Whoosh

<type 'exceptions.ImportError'>: cannot import name loads 
Traceback (most recent call last): 
    File "/base/data/home/apps/myapp/1.334374478538362709/hello.py", line 6, in <module> 
    from whoosh import store 
    File "/base/data/home/apps/myapp/1.334374478538362709/whoosh/__init__.py", line 17, in <module> 
    from whoosh.index import open_dir, create_in 
    File "/base/data/home/apps/myapp/1.334374478538362709/whoosh/index.py", line 31, in <module> 
    from whoosh import fields, store 
    File "/base/data/home/apps/myapp/1.334374478538362709/whoosh/store.py", line 27, in <module> 
    from whoosh import tables 
    File "/base/data/home/apps/myapp/1.334374478538362709/whoosh/tables.py", line 43, in <module> 
    from marshal import loads 

Ecco l'importazione che ho nel mio file Python.

# Whoosh ---------------------------------------------------------------------- 
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'utils'))) 
from whoosh.fields import Schema, STORED, ID, KEYWORD, TEXT 
from whoosh.index import getdatastoreindex 
from whoosh.qparser import QueryParser, MultifieldParser 

vi ringrazio in anticipo per il vostro aiuto!

risposta

3

Il modulo marshal non è supportato nel motore dell'app. È lì, ma è vuoto. Il maresciallo funziona normalmente nello sviluppatore. l'ambiente è stato registered as an issue.

Vedere the documentation.

Si può provare quanto segue a monkeypatch del modulo marshal. Inserire il codice seguente prima di fare qualsiasi altra importazioni:

import pickle 
import marshal 
marshal.loads = pickle.loads 
marshal.dumps = pickle.dumps # I assume it needs dumps also 

Non ho provato questo, quindi non ho assolutamente idea se funzionerà! Tenere anche presente che i carichi/discariche di pickle sono più lenti dei carichi/discariche di marshal.

+0

Nel mio test per App Engine ho notato pickle (piuttosto che cPickle) a volte più di 10 volte più lento del marshal. – gravitation

6

Probabilmente potresti risolvere i tuoi problemi scaricando e utilizzando Whoosh-Appengine, la versione di Whoosh specificamente mirata a lavorare con Google App Engine.

+1

Sto usando quella versione ... funziona solo nell'Env di sviluppo. – Martin

+2

Ricordare che anche se si risolve questo problema, Whoosh-Appengine utilizza solo l'archivio dati come archivio file e non rispetta il limite di 1 MB, pertanto potrebbe non funzionare per una notevole quantità di dati. –

+0

Esiste ora un supporto sperimentale per gae all'interno dell'attuale versione di Whoosh. Vedi 'whoosh/filedb/gae.py' nella versione 2.4.1. – hangtwenty

1

si veda il commento # 71 qui: http://code.google.com/p/googleappengine/issues/detail?id=217&q=Whoosh&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component#c71:

Non è il mio strumento, ma dice:

ho creato una full text Search API per il porting http://whoosh.ca/ quindi è avaliable su AppEngine. (Memorizza l'indice nel datastore)

È possibile scaricarlo da http://github.com/tallstreet/Whoosh-AppEngine/tree/master

Comprende tutte Whooshes funzioni, tra cui:

1 Pythonic API. 2 Indicizzazione e ricerca in campo. 3 Rapidità di indicizzazione e recupero 4 Algoritmo di assegnazione inseribile (incluso BM25F), analisi del testo, archiviazione, invio del formato , ecc. 5 Linguaggio di query potente analizzato da pyparsing. 6 Pure Python spell-checker