Python 应用程序引擎上的全文搜索
我需要用谷歌应用程序引擎做全文搜索。我找到了这个项目,它运行得非常好,只要我使用应用程序引擎开发环境。。。当我将我的应用程序上传到AppEngine时,我得到了以下回溯。对于我的测试,我正在使用本项目中提供的示例应用程序。知道我做错了什么吗Python 应用程序引擎上的全文搜索,python,google-app-engine,full-text-search,whoosh,Python,Google App Engine,Full Text Search,Whoosh,我需要用谷歌应用程序引擎做全文搜索。我找到了这个项目,它运行得非常好,只要我使用应用程序引擎开发环境。。。当我将我的应用程序上传到AppEngine时,我得到了以下回溯。对于我的测试,我正在使用本项目中提供的示例应用程序。知道我做错了什么吗 <type 'exceptions.ImportError'>: cannot import name loads Traceback (most recent call last): File "/base/data/home/apps/m
<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
提前感谢您的帮助 应用程序引擎不支持封送处理模块。它在那里,但它是空的。该封送处理在开发环境中正常工作 看 您可以尝试以下方法来修补封送处理模块。在执行任何其他导入之前,请输入以下代码:
import pickle
import marshal
marshal.loads = pickle.loads
marshal.dumps = pickle.dumps # I assume it needs dumps also
我还没有尝试过这个,所以我完全不知道它是否有效!还要注意,pickle加载/转储比marshal加载/转储慢。您可以通过下载和使用专门针对Google App Engine的Whoosh版本来解决问题。这是一个关于实现全文搜索的官方示例: 我目前正在通读它,因为我需要实现它,也许它也会帮助其他人。请参见此处的注释71: : 这不是我的工具,但上面写着: 我已经通过移植创建了一个全文搜索api,因此它是可用的 在阿彭金。(它将索引存储在数据存储中) 你可以从 它包括所有嗖嗖声功能,包括: 1个Python API。 2现场索引和搜索。 3快速索引和检索 4可插拔评分算法(包括BM25F)、文本分析、存储、发布 格式等。 5通过pyparsing解析的强大查询语言。
6纯Python拼写检查器我正在使用该版本。。。它只在开发环境中工作。请记住,即使您解决了这个问题,Whoosh Appengine也只是将数据存储用作文件存储,并且不遵守1MB限制,因此它可能无法处理任何大量数据。目前的Whoosh版本中对gae提供了实验性支持。请参阅2.4.1版本中的
whoosh/filedb/gae.py
。在对App Engine的测试中,我注意到pickle(而不是cPickle)有时比marshal慢10倍多。
import pickle
import marshal
marshal.loads = pickle.loads
marshal.dumps = pickle.dumps # I assume it needs dumps also