2009-06-22 18 views
10

Necesito hacer una búsqueda de texto completo con Google App Engine. Encontré el proyecto Whoosh y funciona muy bien, siempre que use App Engine Development Environement ... Cuando cargo mi aplicación en App Engine, obtengo el siguiente TraceBack. Para mis pruebas, estoy usando la aplicación de ejemplo proporcionada en este proyecto. ¿Alguna idea de lo que estoy haciendo mal?Búsqueda de texto completo en 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 

Aquí está la importación que tengo en mi archivo de 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 

Gracias de antemano por su ayuda!

Respuesta

3

El módulo de Marshal no es compatible con el motor de aplicaciones. Está allí, pero está vacío. Ese mariscal está trabajando normalmente en el desarrollador. el medio ambiente ha sido registered as an issue.

Ver the documentation.

Puede intentar lo siguiente para monkeypatch el módulo Marshal. Coloque el siguiente código antes de hacer cualquier otra importaciones:

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

No he probado esto, así que no tengo ni idea de si va a trabajar! También tenga en cuenta que las cargas/vaciados de enlechado son más lentos que las cargas/vaciados de carga.

+0

En mis pruebas para App Engine me he dado cuenta de que pickle (en lugar de cPickle) a veces es más de 10 veces más lento que Marshal. – gravitation

6

Probablemente pueda resolver sus problemas descargando y usando Whoosh-Appengine, la versión de Whoosh específicamente diseñada para trabajar con Google App Engine.

+1

Estoy usando esa versión ... solo funciona en Development Env. – Martin

+2

Tenga en cuenta que incluso si soluciona este problema, Whoosh-Appengine solo utiliza el almacén de datos como un almacén de archivos, y no respeta el límite de 1 MB, por lo que puede no funcionar para ninguna cantidad sustancial de datos. –

+0

Ahora hay soporte experimental para gae dentro del lanzamiento actual de Whoosh. Ver 'whoosh/filedb/gae.py' en la versión 2.4.1. – hangtwenty

1

Véase el comentario # 71 aquí: http://code.google.com/p/googleappengine/issues/detail?id=217&q=Whoosh&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component#c71:

No es mi herramienta, pero dice:

He creado una búsqueda de texto completa API por portar http://whoosh.ca/ por lo que es disponible en App Engine. (Que almacena el índice en el almacén de datos)

puede descargarlo desde http://github.com/tallstreet/Whoosh-AppEngine/tree/master

Incluye todas whooshes características que incluyen:

1 API Pythonic. 2 indexación y búsqueda estructuradas. 3 Rápida indexación y recuperación 4 Algoritmo de puntuación conectable (incluido BM25F), análisis de texto, almacenamiento, publicación formato, etc. 5 Potente lenguaje de consulta analizado por pyparsing. 6 Corrector ortográfico Pure Python

Cuestiones relacionadas