【问题标题】:Full-text search on App Engine with Whoosh使用 Whoosh 在 App Engine 上进行全文搜索
【发布时间】:2023-04-08 08:24:01
【问题描述】:

我需要使用 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

这是我在 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

提前感谢您的帮助!

【问题讨论】:

    标签: python google-app-engine full-text-search whoosh


    【解决方案1】:

    您可能可以通过下载和使用 Whoosh-Appengine(专门用于与 Google App Engine 配合使用的 Whoosh 版本)来解决您的问题。

    【讨论】:

    • 我正在使用那个版本...它只适用于开发环境。
    • 请记住,即使您解决了这个问题,Whoosh-Appengine 也只是将数据存储用作文件存储,并且不遵守 1MB 的限制 - 因此它可能不适用于任何大量数据。
    • 在当前 Whoosh 版本中提供了对 gae 的实验性支持。请参阅 2.4.1 版本中的 whoosh/filedb/gae.py
    【解决方案2】:

    这是一个关于实现全文搜索的官方示例:http://code.google.com/p/guestbook-example-appengine-full-text-search/

    我目前正在阅读它,因为我需要实现它,也许它也会对其他人有所帮助。

    【讨论】:

      【解决方案3】:

      应用引擎不支持 marshal 模块。它在那里,但它是空的。那个元帅在开发中正常工作。环境一直是registered as an issue

      the documentation

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

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

      我还没有尝试过,所以我完全不知道它是否会起作用!另请注意,pickle 加载/转储比编组加载/转储慢。

      【讨论】:

      • 在我对 App Engine 的测试中,我注意到 pickle(而不是 cPickle)有时比 marshal 慢 10 倍以上。
      【解决方案4】:

      请参阅此处的评论 #71: http://code.google.com/p/googleappengine/issues/detail?id=217&q=Whoosh&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component#c71:

      这不是我的工具,但它说:

      我通过移植http://whoosh.ca/ 创建了一个全文搜索api,所以它是可用的 在 AppEngine 上。 (它将索引存储在数据存储中)

      您可以从http://github.com/tallstreet/Whoosh-AppEngine/tree/master下载它

      它包含 Whooshes 的所有功能,包括:

      1 Pythonic API。 2 现场索引和搜索。 3 快速索引和检索 4 可插拔评分算法(包括BM25F)、文本分析、存储、发布 格式等 5 强大的通过pyparsing解析的查询语言。 6 纯 Python 拼写检查器

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-02
        • 2011-05-07
        • 2011-05-23
        • 2011-03-14
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        • 2011-02-10
        相关资源
        最近更新 更多