2009-09-10 14 views
5

Właśnie zaczynam od Pythona w Google App Engine, budując bazę danych kontaktów. Jaki jest najlepszy sposób na wdrożenie wyszukiwania wieloznacznego?Wyszukiwanie przy użyciu symboli wieloznacznych w aplikacji Appengine w pytonie

Na przykład czy mogę wykonać zapytanie ("nazwa =",% ewman%)?

+1

Do częściowego dopasowania za pomocą interfejsu API wyszukiwarki GAE: http://stackoverflow.com/questions/12899083/partial-matching-gae-search-api/13171181#13171181 –

Odpowiedz

11

Niestety, App Engine Google nie może zrobić częściowy tekst pasuje

From the docs:

Wskazówka: Filtry zapytania nie mają wyraźny sposób pasujące tylko część wartości ciągu, ale można fałszywy a, stosując prefiks mecz nierówność filtry:

db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd") 

dopasowuje e bardzo istota MyModel z propozycją właściwości łańcucha, która zaczyna się od znaków abc. Ciąg unicode u "\ ufffd" reprezentuje największy możliwy znak Unicode. Gdy wartości właściwości są sortowane w indeksie, wartości mieszczące się w tym przedziale są wartościami zaczynającymi się od podanego prefiksu.

+0

Dzięki za seth. Wydaje się to dużym ograniczeniem. Ciekawe, jak implementują częściowe dopasowania na contacts.google.com? Być może trzeba trzymać się normalnej bazy danych SQL. –

+0

Zgadzam się. Wygląda na to, że istnieje kilka wtyczek, które próbują wykonać wyszukiwanie pełnotekstowe, ale ich nie próbowałem. Ten "wydaje się" najbardziej popularny: http://code.google.com/p/app-engine-patch/ – seth

+0

Trzymanie się "normalnej bazy danych SQL" nie pomaga, ponieważ SQL DB wykonuje pełne skanowanie tabeli aby wykonać to zapytanie - w ogóle nie skalowalne! Zobacz moją odpowiedź dla szczegółów. –

3

Aparat App Engine nie może wykonywać zapytań "polubionych", ponieważ nie może ich efektywnie wykonywać. Jednak nie można także użyć bazy danych SQL: Zapytanie "foo LIKE"% bar% "" może być wykonane tylko przez skanowanie sekwencyjne w całej tabeli.

Potrzebny jest odwrócony indeks. Podstawowe wyszukiwanie pełnotekstowe jest dostępne w App Engine pod numerem SearchableModel. Bill Katz napisał ulepszoną wersję here i dostępne jest komercyjne rozwiązanie dla App Engine (z bezpłatną wersją) dostępne here.

Powiązane problemy