使用Whoosh在App Engine上进行全文搜索

Mar*_*tin 10 python google-app-engine full-text-search whoosh

我需要使用Google App Engine进行全文搜索.我找到了项目Whoosh并且它工作得非常好,只要我使用App Engine开发环境......当我将我的应用程序上传到App Engine时,我得到以下TraceBack.对于我的测试,我使用的是此项目中提供的示例应用程序.我知道我做错了什么?

<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
Run Code Online (Sandbox Code Playgroud)

这是我在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
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助!

Ale*_*lli 6

您可以通过下载和使用Whoosh-Appengine来解决您的问题,Whoosh-Appengine是专门针对使用Google App Engine的Whoosh版本.

  • 请记住,即使您解决了这个问题,Whoosh-Appengine只是将数据存储区用作文件存储区,并且不遵守1MB限制 - 因此它可能无法用于任何大量数据. (2认同)

cod*_*ape 3

应用程序引擎不支持 marshal 模块。它在那里,但它是空的。那个元帅在开发中正常工作。环境已被登记为一个问题

请参阅文档

您可以尝试以下方法来对元帅模块进行猴子修补。在执行任何其他导入之前放置以下代码:

import pickle
import marshal
marshal.loads = pickle.loads
marshal.dumps = pickle.dumps # I assume it needs dumps also
Run Code Online (Sandbox Code Playgroud)

我没有尝试过这个,所以我完全不知道它是否有效!另请注意,pickle 加载/转储比 marshal 加载/转储慢。