2009-06-22 2 views
10

Мне нужно выполнить полный поиск текста с помощью Google App Engine. Я нашел проект Whoosh, и он работает очень хорошо, если я использую Environement разработки App Engine ... Когда я загружаю свое приложение в App Engine, я получаю следующий TraceBack. Для моих тестов я использую пример приложения, представленного в этом проекте. Любая идея, что я делаю неправильно?Полнотекстовый поиск в App Engine с 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 

Вот импорт, который у меня есть в файле 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 

Заранее благодарю вас за помощь!

ответ

3

Модуль маршала не поддерживается приложением. Он есть, но он пуст. Этот маршал работает нормально в dev. окружающая среда registered as an issue.

См. the documentation.

Вы можете попробовать следующее, чтобы обезопасить модуль маршала. Поместите следующий код, прежде чем делать какой-либо другой импорт:

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

Я не пробовал, так что у меня нет абсолютно никакой идеи, если она будет работать! Также имейте в виду, что рассолы/отвалы медленнее, чем нагрузки/свалки маршала.

+0

В моем тестировании для App Engine я заметил, что pickle (а не cPickle) иногда более чем на 10 раз медленнее маршала. – gravitation

6

Возможно, вы решили решить свои проблемы, загрузив и используя Whoosh-Appengine, версию Whoosh, специально предназначенную для работы с Google App Engine.

+1

Я использую эту версию ... она работает только в Envelope развития. – Martin

+2

Имейте в виду, что даже если вы исправите эту проблему, Whoosh-Appengine просто использует хранилище данных в качестве хранилища файлов и не соблюдает ограничение 1 МБ, поэтому он может не работать для какого-либо значительного объема данных. –

+0

В настоящее время существует экспериментальная поддержка gae внутри текущего выпуска Whoosh. См. 'Whoosh/filedb/gae.py' в версии 2.4.1. – hangtwenty

4

Это официальный пример о реализации полнотекстового поиска: http://code.google.com/p/guestbook-example-appengine-full-text-search/

Я в настоящее время читает через него, как я нахожусь в необходимости его реализации, может быть, это поможет другим также.

1

См комментарий # 71 здесь: http://code.google.com/p/googleappengine/issues/detail?id=217&q=Whoosh&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component#c71:

Это не мой инструмент, но он говорит:

Я создал полный текст API поиска по портированию http://whoosh.ca/ поэтому имеющийся на AppEngine. (Он хранит индекс в хранилище данных)

Вы можете скачать его с http://github.com/tallstreet/Whoosh-AppEngine/tree/master

Она включает в себя все Нереальный функций, включая:

1 вещий API. 2 Индексирование и поиск полей. 3 Быстрая индексация и извлечение 4 Подключаемый алгоритм подсчета очков (включая BM25F), анализ текста, хранение, публикация формат и т. Д. 5 Мощный язык запросов, обработанный pyparsing. 6 Pure Python spell-checker